【问题标题】:Checking a char array for invalid characters检查 char 数组中的无效字符
【发布时间】:2020-11-21 18:24:51
【问题描述】:

我正在尝试创建一个函数,当传递一个数组时,它会根据一个有效字符数组检查它,如果它们都有效则返回 true,如果其中一个不有效则返回 false。

尽管存在无效字符,但我的第二个断言失败了。

void test (void)
{   
   char testArr1[MAXGRIDHW][MAXGRIDHW] = {{"..."},
                                          {"..."},
                                          {"..."}};

   char testArr2[MAXGRIDHW][MAXGRIDHW] = {{"..z"},
                                          {"..."},
                                          {"..."}};

   assert(noInvalidLetters(testArr1) == true);
   assert(noInvalidLetters(testArr2) == false);

}

bool noInvalidLetters (char b[][MAXGRIDHW])
{
   int i, j;
   bool valid;
   const char validChars[MAXVALIDCHARS] = {'k', 'K', 'r', 'R', 'g', 'G', 'y',
                                           'Y', 'b', 'B', 'm', 'M', 'c', 'C',
                                           'w', 'W', '.'};

   for (i = 0; i < MAXGRIDHW; i++) {
      for (j = 0; j < MAXGRIDHW; j++) {
         if (strchr(validChars, b[i][j])){
            valid = true;
         } else {
            valid = false;
         }
      }
   }
   return valid;
}

【问题讨论】:

    标签: arrays c string char


    【解决方案1】:

    如果您找到有效字符,则不应将 valid 设置回 true。然后,一个无效字符后跟一个有效字符将是“有效的”。实际上,您根本不需要布尔值。你可以早点回来:

    bool noInvalidLetters (char b[][MAXGRIDHW])
    {
       int i, j;
       const char validChars[MAXVALIDCHARS] = {'k', 'K', 'r', 'R', 'g', 'G', 'y',
                                               'Y', 'b', 'B', 'm', 'M', 'c', 'C',
                                               'w', 'W', '.'};
    
       for (i = 0; i < MAXGRIDHW; i++) {
          for (j = 0; j < MAXGRIDHW; j++) {
             if (!strchr(validChars, b[i][j])){
                // invalid char so just say it's invalid
                return false;
             }
          }
       }
       // found no invalid chars so must be all valid
       return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-20
      • 2021-02-15
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多