如何检查2D数组中的行中的每个元素在C中是否相同



例如,如果我有一个2D数组的char seatingChart[5][5]=

x x . x x
. x . x x
. . . . .
x x x x .
. . . . .

我该如何打印出第3行和第5行都是"?

我试着像这个一样做

for (int row = 0; row < 5; row++) {
for (int col = 0; col < 5; col++) {
}
if (seatingChart[row][0-9] == "."){
printf("Row %d is empty",row+1);
}
}
}

有没有一种更快的方法不用写&amp;在if语句中多次?因为我的实际座位表有1000行和1000列

您可以通过实现

  1. 设置";该行中的所有元素都是CCD_;旗帜
  2. 在那一排上迭代
  3. 当您找到一个不是.的元素时,请清除该标志
  4. 迭代之后,检查标志以查看结果
#include <stdio.h>
int main(void) {
char seatingChart[5][5] = {
"xx.xx",
".x.xx",
".....",
"xxxx.",
"....."
};
for (int row = 0; row < 5; row++) {
int is_all_dot = 1;
for (int col = 0; col < 5; col++) {
if (seatingChart[row][col] != '.') {
is_all_dot = 0;
break;
}
}
if (is_all_dot) {
printf("Row %d is emptyn", row + 1);
}
}
return 0;
}

您只需检查下一个元素是否与当前元素相同,如果整行通过,则将行索引标记为完全相同。如果任何一项检查失败,您可以移到下一行,因为这将使整行无效。

为此,我建议编写一个单独的函数来检查行。这既使程序可读性更强,也可以将早期返回作为算法的一部分:

bool row_empty(size_t row_length, const char row[row_length])
{
for (size_t n = 0; n < row_length; n++)
{ 
/*
As soon as we see a non-empty seat, we know that the
row is empty
*/
if (row[n] != '.')
return false;
}
/* We only reach this point if all the seats were empty */
return true;
}

现在,通过行循环变得非常简单:

for (int row = 0; row < num_rows; row++)
{
if (row_empty(row_length, seatingChart[row])
{
printf("Row %d is empty",row+1);
}
}

一些最后的注意事项:

为了您的利益,我删除了硬编码值5。必须添加#include <stdbool.h>才能使用booltruefalse。如果编译器没有stdbool.h,则必须使用int.0和0

相关内容

  • 没有找到相关文章

最新更新