【问题标题】:How would I check if every element in a row within a 2D array is the same in C?如何检查二维数组中一行中的每个元素在 C 中是否相同?
【发布时间】:2021-09-05 11:57:02
【问题描述】:

例如,如果我有一个 char 的二维数组 seatChart[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);
                }
            }
        }

有没有一种更快的方法来做到这一点,而无需在 if 语句中多次写入 &&?因为我的实际座位表有 1000 行和 1000 列

【问题讨论】:

    标签: c multidimensional-array char row col


    【解决方案1】:

    你可以这样做

    1. 设置“此行中的所有元素都是.”标志。
    2. 遍历行。
    3. 当您发现不是. 的元素时,清除该标志。
    4. 迭代后,检查flag看看结果。
    #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 empty\n", row + 1);
            }
        }
    
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        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 &lt;stdbool.h&gt; 才能使用booltruefalse。 如果您的编译器没有stdbool.h,则必须使用int10

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-03
          • 1970-01-01
          • 2020-06-14
          • 1970-01-01
          • 2017-10-29
          • 2012-01-27
          • 1970-01-01
          • 2022-01-20
          相关资源
          最近更新 更多