永发信息网

c++问题请帮我找错

答案:5  悬赏:50  手机版
解决时间 2021-06-04 20:22
  • 提问者网友:轮囘Li巡影
  • 2021-06-04 00:22

以下是书上的一题,我也觉的代码写得莫名其妙,不知哪里不对?我运行了一下发现也不行。请帮我看看,谢谢!

输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

#include<stdio.h>

void main()

{

char string[80];

int i,num=0,word=0;

char c;

gets(string);

for(i=0;(c=string[i])!='\0';i++)

if(c==' ') word=0;

else if (word==0)

{

word=1;num++;

}

printf("there are %d words in the line.\n",num);

}

最佳答案
  • 五星知识达人网友:鸠书
  • 2021-06-04 01:31

这段代码没问题,只不过它统计的是以空格隔开的字符串数目,每个字符串不一定都是字母,也可以包含其它字符,比如数字,+-号等(不包括空格),当然你输入的都是单词的话自然就是统计单词的数目。


每当出现一个空格就将word置0,遇到别的字符(else if)判断word是否为0,如果是的话,就表示前一个字符是是空格,这个字符属于一个新的字符串(或者说单词),num加1,word置1;不是的话(即word==1)就表示前一个字符不是空格,这个字符不属于一个新的字符串,就什么都不做,如此直到最后结束符'\0'。

全部回答
  • 1楼网友:神也偏爱
  • 2021-06-04 05:57
错在gets!它后面括号里的计算机会把它当成变量而不是数组第一元素的默认值!在C++中变量定义后你才能用!况且这段程序是检策到第一空字符串停止,你定义数组元素为八十,C++不做下标检查会产生下标越界错误!
  • 2楼网友:孤独入客枕
  • 2021-06-04 04:40

#include<stdio.h>

void main()

{

char string[80];

int i,num=0,word=0;

char c;

gets(string);

for(i=0;(c=string[i])!='\0';i++)

if(c!=' ') word=0; //可能这一句有问题

else if (word==0)

{

word=1;num++;

}

printf("there are %d words in the line.\n",num);

}

  • 3楼网友:洒脱疯子
  • 2021-06-04 03:16

#include <stdio.h> #include <ctype.h>

void main()

{

char string[80];

int i,num=0,word=0;

char c;

gets(string);

for(i=0;(c=string[i])!='\0';i++) { //isalpha(string[i] )相当于(string[i] > 'A' && string[i] < 'Z') || (string[i] > 'a' && string[i] < 'z') if ( isalpha(string[i] ) ) { num++; } } printf("there are %d words in the line.\n",num);

}

  • 4楼网友:廢物販賣機
  • 2021-06-04 03:01
我这里可以啊,有什么问题
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯