C语言单词个数
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{ count=0;
if(str[i]==' ')
{ j=i;
for(;str[j]!=' ';j++)//判断连续空格的问题
if(str[i]==' ')
count++;
}
if(count>=1)
word++;
}
printf("个数%d",word);
return 0;
}
请问哪里出错了
word个数一直都是0 展开
问题1:
你是想这样:
从空格 i 处, 往后依次寻找, 找到第一个不是空格的 j ,找到则count++
但实际效果是:
若 j 处不为空格,继续; 若 j 处为空格,结束for循环
由于 j = i; 所以for循环开始时 str[j] == ' ',所以会结束循环,所以count一直为0,word也永远不会++,这就是原因所在
问题2
就算上面的代码你改OK了,但是还有一个问题你没注意
从空格 i 处, 找到不是空格的 j 了,OK,
但是下一个 i,居然是i++,
请问按你这种算法,
那 "are---ok\0"(用符号"-"代替空格),岂不是第一个单词被计数三次了?
所以下一个i, 应该先 i = j, 再 i++
改法:(当然也有其他改法, 末尾判断字符串结尾处可能还有问题)
#include "stdio.h"
int main()
{
char str[1000];
int i, j, count = 0, word = 0;
gets(str);
for( i = 0; str[i] != '\0'; i++)
{
count = 0;
if(str[i] == ' ')
{
j = i;
for( ; str[j] == ' ' ; j++)
{
count++;
}
if(count >= 1)
{
word++;
i = j-1;
}
}
}
printf("个数%d",word);
return 0;
}
在最上面添上:#include "stdio.h"
就不报错了
我头文件当然写了 只是提问没写出来
那你是想问怎么改?
请问哪里出错了——我没看你的代码,只是运行了一下
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{
count=0,
if(str[i]==' ')
{ j=i;
for(;str[j]==' ';j++);//判断连续空格的问题
count++;
}
if(count>=1)
word++;
}
printf("个数%d",word);
return 0;
}
那句if的确有点多余 但是删不删除对结果没改变
int main()
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{
count=0;
if(str[i]==' ')
{ j=i;
for(;str[j]==' ';j++);//判断连续空格的问题
count++;
}
if(count>=1)
word++;
}
printf("个数%d",word);
return 0;
}
这样还有问题?你能输入吗?
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
j = strlen(str);//这里改成strlen获取长度,如果用原来的方法,我的第二个while循环会出错
for(i=0;i<j;i++){
while(str[i++]==' ');//过滤空格,行首空格,行尾空格,词中间的空格
count = 0;
while(i<j && str[i++]!=' '){ // 判断长度不超出总字符数,且不遇到空格
count++;
}
if(count >= 1)
word++;
}
printf("个数%d",word);
return 0;
}
我这样写测了几个样例没错,楼主可参考
2012-07-17