c++ - 如何检查矩阵的任何行是否包含所有'A'?
问题描述
我一直在尝试这样做,但问题是最终结果总是有问题或缺失。我有很多 if 语句,我想看看是否可以通过使用 for 循环来减少它。
char matrix[3][3] = {
{'A','A','A'},{'B','A','B'},{'C','A','C'}
};
if (matrix[0][0] == 'A' && matrix[0][1] == 'A' && matrix[0][2] == 'A') {
cout << "Found!" << endl;
}
还有更多的 if 语句,我没有把它放在这里,因为它是相同的东西,只是不同的索引。
我试着做一个这样的for循环,
for (int i = 0; i < matrix[0][2]; i++) {
if (matrix[0][0] == matrix[0][1] && matrix[0][0] == matrix[0][2])
cout << "Found!" << endl;
break;
}
与将近 20 行的 if 语句相比,这看起来更有条理,但它仍然缺少一些部分。例如在数组中和[0][1]
所有的都有字符。当同一字符垂直或水平出现在同一行时,如何将其实现到 for 循环中以打印出消息。[1][1]
[2][1]
'A'
解决方案
您可以使用标准算法方便地表达这一点:
if (std::any_of(std::begin(matrix), std::end(matrix),
[](auto const & row) {
return std::all_of(std::begin(row), std::end(row),
[](char c) {
return c == 'A';
});
}))
{
std::cout << "Found";
}
从 C++20 开始,这变得更容易读写:
namespace rs = std::ranges;
if (rs::any_of(matrix, [](auto const & row) {
return rs::all_of(row, [](char c) {
return c == 'A';
});
}))
{
std::cout << "Found";
}
这是一个演示
推荐阅读
- javascript - 如何在我的 javascript/jquery 中根据需要设置复选框类型的输入对象?
- influxdb - influxdb 中的查询和高级操作
- python - 带替换的迭代函数
- python-3.x - LabelBinazer 的问题?
- pandas - pandas - 将对象类型转换为浮点类型
- laravel - 如何在laravel中更改各个页面的不同标题
- pervasive-sql - 普遍的 psql 备份和恢复
- git - 维护 2 个代码相似但不完全相同的分支
- intellij-idea - Intellij Idea 不显示调用枚举成员的符号错误
- python - PyCharm自动补全中的`f`和`m`是什么意思?