【发布时间】:2021-09-12 22:49:38
【问题描述】:
当我输入The quick brown fox jumps over the lazy dog 时,下面的程序会打印not a pangram。然而,我希望 s 是 26 并且 printf("pangram") 会被执行。我做错了什么?
#include <ctype.h>
#include <stdio.h>
#include <string.h>
char findpan(char arr[]) {
int i, j, count = 0;
for (i = 0; i < strlen(arr); i++) {
if (isalpha(arr[i]))
count++;
}
for (i = 0; i < strlen(arr); i++) {
for (j = i + 1; j < strlen(arr); j++) {
if (arr[i] == arr[j])
count--;
}
}
return (count);
}
int main() {
int s;
char str[60];
fgets(str, 60, stdin);
s = findpan(str);
if (s == 26)
printf("pangram");
else
printf("not a pangram");
return 0;
}
【问题讨论】:
-
绝对有问题的一件事是您将大写和小写字母视为不同的字母。
-
s是-5。问题是算法。你应该测试0吗?请注意,如果文本中有 4 个 o,则减去 6,而不是 3。 -
也许是时候学习如何使用 调试器 逐句执行代码,同时监控变量及其值。
-
请注意,在您的算法中,您“不计算”任何重复的字符,而不仅仅是 alpha,因此重复的空格字符也会导致
count减少。
标签: c c-strings counting function-definition pangram