| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1013 人关注过本帖
标题:统计单词个数的一道题,竟然很多人找不到错误。
只看楼主 加入收藏
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
收藏
 问题点数:0 回复次数:9 
统计单词个数的一道题,竟然很多人找不到错误。
今天翻了C语言书,发现了一道题,自己做了下,没解出来。
题目是这样的,输入一行字符,统计其中有多少个单词,单词间用空格分开。
书上的程序是这样的:

#include<stdio.h>
main()
{
 char string[81];
 int i,num=0,word=0;
 char c;
 gets(string);
 for (i=0;(c=string[i])!='\n';i++)
  if(c==' ') word=0;
  else if(word==0)
  {
   word=1;
   num++;
  }
 
  printf("there are %d words.\n",num);
}

但是当我输入I AM A BOY 时竟然输出结果是:there are 6 words.
不明白怎么会输出这个结果,我也找不到程序有错误的,哪位帮忙指点一下。THX
搜索更多相关主题的帖子: 单词 统计 
2005-10-19 15:20
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
收藏
得分:0 
word为判别是否是单词的标志
2005-10-19 15:22
凌云
Rank: 1
等 级:新手上路
威 望:1
帖 子:78
专家分:0
注 册:2005-9-17
收藏
得分:0 
for (i=0;(c=string[i])!='\n';i++)

这里\n应该改为\0

2005-10-19 15:52
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
收藏
得分:0 
哦,没错,谢谢楼上的
2005-10-19 15:53
凌云
Rank: 1
等 级:新手上路
威 望:1
帖 子:78
专家分:0
注 册:2005-9-17
收藏
得分:0 
按你的方法,num初始值应为1,这样结果才正确!

2005-10-19 15:55
m_pzhang
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-9-27
收藏
得分:0 

#include<stdio.h> main() { char *string; int len, i,num=0,flag=0,old_flag=0,word=0; char c; printf("please input a string:\n"); gets(string); len=strlen(string); printf("string lenth: %d.\n",len);

for (i=0;i<=len;i++) { c=*(string+i); /* printf("%c:%d",c,c);*/ if(c==' '||c=='\0') { flag=0; if(old_flag==1) word++; } else { flag=1; } old_flag=flag; } printf("there are %d words.\n",word); }

2005-10-20 13:59
爱人
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2004-10-11
收藏
得分:0 
gets(string);
for (i=0;(c=string[i])!='\n';i++)
该为
while((c=getchar())!='\n'){
}
就行了
完全的是:
#include&lt;stdio.h&gt;
main()
{
char string[81];
int i,num=0,word=0;
char c;
while((c=getchar())!='\n'){

  if(c==' ') word=0;
  else if(word==0)
  {
   word=1;
   num++;
  }
}
 printf("there are %d words.\n",num);
}

2005-10-20 23:12
爱人
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2004-10-11
收藏
得分:0 
你的错误主要是getcahr和gets用法。可能是这个编译软件的问题。具体的我也不太清楚

2005-10-20 23:14
socks
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2005-10-13
收藏
得分:0 
其实楼主的程序只有一处错误,for (i=0;(c=string[i])!='\n';i++)这一句的'\n'改成'\0'就可以了,又因为'\0'的ASCII就是0,所以可以改成for (i=0;(c=string[i]);i++),程序中word用来判断是否是空格,num用来记录单词的个数,遇到一个空格,就把num加一。

虔诚的初学者~~~
2005-10-21 18:35
124yj
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-10-23
收藏
得分:0 

我用的指针做的 你看看对不 #include<stdio.h> int strcount(char *p,char c) { int count=0; while(*p!=0) { if(*p==c) { count++; } p++; } return count; } void main() { char str[100]; char c; char choice; do { printf("Please the string:"); scanf("%s",str); printf("Please the char:"); scanf(" %c",&c); int index=strcount(str,c); printf("字符%c在字符串%s中出现的次数是%d\n\n",c,str,index);

printf("是否在试一次?(Y/N).."); scanf(" %c",&choice); } while(choice=='y'||choice=='Y');

}

2005-10-23 11:14
快速回复:统计单词个数的一道题,竟然很多人找不到错误。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089980 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved