我实现了这个代码来获得否。字数。它适用于所有单个字符,即如果我输入 "q w r "
作为输入,它会给我 3 个单词,但是当我输入 "qwe ed df "
作为输入时, 它显示 2.
#include<stdio.h>
int main()
{
int c=getchar();
int words=0;
while(c!=EOF)
{
if(c==' ' || c=='\n')
{
c=getchar();
}
else if(c>='a' && c<='z')
{
c=getchar();
if(c==' ')
{
words=words+1;
c=getchar();
}
else
{
c=getchar();
}
}
}
printf("%i\n",words);
}
诀窍是计算边界。
您的原始代码存在错误......
if(c==' ')
{
words=words+1;
c=getchar();
}
只有当一对读取结果为 'a'
=> 'z'
后跟 ' '
时,代码才计算单词数。
诀窍是将循环简化为一次读取一个字符的循环。 (这确保不会出现奇怪的边界),以及一个模拟您是在吃单词还是空格的状态机。
enum Mode { word = 1, spaces = 2 };
int c=getchar();
enum Mode currentMode = spaces;
int words=0;
while(c!=EOF)
{
if(c==' ' || c=='\n')
{
if( currentMode == word ) {
words=words+1;
}
currentMode = spaces;
}
else if(c>='a' && c<='z')
{
currentMode = word;
}
c=getchar();
}
// count the last word...
if( currentMode == word ) {
words=words+1;
}
代码现在会忽略任何非字母字符,既不是单词也不是空格。
编辑:修复了不正确的枚举用法
我是一名优秀的程序员,十分优秀!