我有一个函数,它通过循环遍历二维数组并在每次找到有效字符数组中的字符时将一维数组的每个单元格中的计数增加 1 来计算二维数组中唯一字符的数量。然后我循环一维数组,每次找到一个数字大于 0 的单元格时,都会增加一个计数器。如果此数字高于我的结构的高度/宽度,则返回 false。
'。代表一个空白空间,虽然它在程序方案中是有效的,但它不应该算作一个独特的字符。
我想知道是否有一种方法可以创建具有相同功能但更短的函数。
bool uniqueChars (Bookcase *b)
{
int i, j, chars[8] = {0}, cnt = 0;
char validChars[10] = {"KRGYBMCW."};
bNullPoint(b);
for (i = 0; i < b->height; i++) {
for (j = 0; j < b->width; j++) {
b->shelves[i][j] = toupper(b->shelves[i][j]); /* To aid with testing*/
if (strchr(validChars, b->shelves[i][j])) {
if (b->shelves[i][j] == 'K') {
chars[0] += 1;
}
if (b->shelves[i][j] == 'R') {
chars[1] += 1;
}
if (b->shelves[i][j] == 'B') {
chars[2] += 1;
}
if (b->shelves[i][j] == 'G') {
chars[3] += 1;
}
if (b->shelves[i][j] == 'C') {
chars[4] += 1;
}
if (b->shelves[i][j] == 'Y') {
chars[5] += 1;
}
if (b->shelves[i][j] == 'W') {
chars[6] += 1;
}
if (b->shelves[i][j] == 'M') {
chars[7] += 1;
}
} else {
return false;
}
}
}
for (i = 0; i < 8; i++) {
if (chars[i] > 0) {
cnt += 1;
}
}
if (cnt > b->height) {
return false;
}
return true;
}