我的任务是编写一个程序来计算字符串中有多少个单词。单词之间可以用空格或任何符号分隔。问题是它没有通过我的自动测试。
autotest输入:"空间……最后的边疆……这是进取号星舰的航行。它的五年使命是:探索陌生的新世界,寻找新的生命和新的文明,大胆地去到以前没有人去过的地方!
这个例子中的函数返回32而不是38。
我意识到我的计数器有问题,因为它重置为0。但我不明白它为什么会这样。我怎么修理它?
int count_words(const char *str)
{
int count=0;
while(*str!=' ')
{
if((count!=0 && !isalpha(*str) && isalpha(*(++str))|| (count==0 && isalpha(*str))))
{
count++;
}
if(*str==' ')
break;
str++;
}
return count;
}
您需要跟踪您当前是否"在一个单词中"。或者用一句话来说不是。当你从"不在"过渡到"不在"到"in",然后你可以数另一个单词。
int count_words(const char *str)
{
int count = 0;
bool inword = false;
for( ; *str; str++ )
{
if( isalpha(*str) )
{
if( !inword )
count ++;
inword = true;
}
else
{
inword = false;
}
}
return count;
}