c-检查字符数组中的无效字符



我正试图创建一个函数,当传递一个数组时,根据一个有效字符数组进行检查,如果它们都有效,则返回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;
}

如果找到有效字符,则不应将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;
}

相关内容

  • 没有找到相关文章

最新更新