尝试创建一个输出用户输入程序的单词数的函数。我用这段代码继续得到2的值,我不知道为什么或哪里出错。如果有人能指出我正确的方向,那将是伟大的。谢谢!
以下是代码:
#include <stdio.h>
#include <string.h>
int wordcount(char string[101]){
int i, words = 0;
for(i=0;string[i] != '\0';i++)
{
if(string[i] != '\t' && string[i] != '\0'){
words++;
while(string[i] != ' ' && string[i] != '\t' && string[i] !=
'\0')
i++;
}
}
return words;
}
int main (void) {
char input[101];
printf("Word Counter\n");
printf("============\n");
printf("string to be analyzed: \n");
scanf("%100[^\n]", input);
wordcount(input);
printf(" %s - words = %i\n", input, wordcount(input));
}
答案 0 :(得分:0)
现在的主要问题是有两个。
if(string[i] != '\t' && string[i] != '\0'){
恶化,变得更糟
i
在for
和while
中为+1至两次。
例如,它将如下变化。
int wordcount(char string[101]){
int i, words = 0;
for(i=0;string[i] != '\0'; i++){
if(string[i] != ' ' && string[i] != '\t'){// assuming not included the newline.
words++;
i += strcspn(&string[i], " \t") -1;// i point to last character of word
}
}
return words;
}
或i
更改它将在一个地方。
int wordcount(char string[]){
int i, words = 0;
char prev =' ';
for(i=0;string[i] != '\0'; i++){
if(isspace(prev) && !isspace(string[i])){//isspace in <ctype.h>
words++;//count front edge
}
prev = string[i];
}
return words;
}