C语言单词个数

intmain(){charstr[1000];inti,j,count=0,word=0;gets(str);for(i=0;str[i]!='\0';i++){cou... 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++)//判断连续空格的问题
if(str[i]==' ')
count++;
}
if(count>=1)
word++;
}
printf("个数%d",word);
return 0;
}
请问哪里出错了
word个数一直都是0
展开
 我来答
她去过的地方
2012-07-17 · TA获得超过299个赞
知道答主
回答量:83
采纳率:50%
帮助的人:33.4万
展开全部

问题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;
 }

fangfengyan001
2012-07-17
知道答主
回答量:60
采纳率:0%
帮助的人:5.8万
展开全部
没注意,但不太多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CChenwenjuan
2012-07-17 · 超过31用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:80.3万
展开全部
头文件缺少
在最上面添上:#include "stdio.h"
就不报错了
更多追问追答
追问
我头文件当然写了 只是提问没写出来
追答
那你是想问怎么改?
请问哪里出错了——我没看你的代码,只是运行了一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
e通encounter
2012-07-17
知道答主
回答量:5
采纳率:0%
帮助的人:3.2万
展开全部
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;
}
追问
那句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;
}
这样还有问题?你能输入吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sskicgah
2012-07-17 · TA获得超过269个赞
知道答主
回答量:61
采纳率:0%
帮助的人:74.5万
展开全部
int main()
{ 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
展开全部
加个头文件<string.h>,然后用strlen(str);直接求长度吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式