当前位置: 代码迷 >> C语言 >> 统计单词个数的一道题,竟然很多人找不到错误。
  详细解决方案

统计单词个数的一道题,竟然很多人找不到错误。

热度:202   发布时间:2005-10-19 15:20:00.0
统计单词个数的一道题,竟然很多人找不到错误。
今天翻了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
搜索更多相关的解决方案: 单词  统计  

----------------解决方案--------------------------------------------------------
word为判别是否是单词的标志
----------------解决方案--------------------------------------------------------
for (i=0;(c=string[i])!='\n';i++)

这里\n应该改为\0
----------------解决方案--------------------------------------------------------
哦,没错,谢谢楼上的
----------------解决方案--------------------------------------------------------
按你的方法,num初始值应为1,这样结果才正确!
----------------解决方案--------------------------------------------------------

#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); }


----------------解决方案--------------------------------------------------------
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);
}
----------------解决方案--------------------------------------------------------
你的错误主要是getcahr和gets用法。可能是这个编译软件的问题。具体的我也不太清楚
----------------解决方案--------------------------------------------------------
其实楼主的程序只有一处错误,for (i=0;(c=string[i])!='\n';i++)这一句的'\n'改成'\0'就可以了,又因为'\0'的ASCII就是0,所以可以改成for (i=0;(c=string[i]);i++),程序中word用来判断是否是空格,num用来记录单词的个数,遇到一个空格,就把num加一。
----------------解决方案--------------------------------------------------------

我用的指针做的 你看看对不 #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');

}


----------------解决方案--------------------------------------------------------
  相关解决方案