感谢您的关注。
我编写了一段代码,用C语言计算单词,行和字符的数量。
while((c = fgetc(fp)) != EOF)
{
if((char)(c) == ' ' || (char)(c) == '\t'){
num_word++;
num_char++;
}
else if((char)(c) == '\n'){
num_line++;
num_word++;
num_char++;
}
else{
num_char++;
}
}
除num_word外,一切正常。例如,如果测试用例有一个空行,则会再计算一次。
example for test
case
我的程序会计算5而不是4.任何提示都可以解决这个问题吗?
答案 0 :(得分:2)
您使用两个分支(space
,\t
和\n
作为分隔符)来表示新单词。连续的空格字符无效。
要解决此问题,您可以跳过连续的空白字符(通过为其保留计数器或标志),或将新的非空白字符设置为新单词的开头。
K& R的C编程语言提供了很好的例子。
答案 1 :(得分:1)
你的字数是1,因为你有1个空行。如果您有2个空白行,那么它将是2个等等。这是因为你计算换行符的方式。如果有连续的换行符表示空行,那么你最容易做的就是不增加字数。
char lastChar = ' ';
while((c = fgetc(fp)) != EOF)
{
if((char)(c) == ' ' || (char)(c) == '\t'){
num_word++;
num_char++;
}
else if((char)(c) == '\n'){
num_line++;
if(lastChar != '\n')
num_word++;
num_char++;
}
else{
num_char++;
}
lastChar = (char)c;
}