永发信息网

c++问题请帮我找错

答案:5  悬赏:50  手机版
解决时间 2021-06-04 20: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);

}

最佳答案

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


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

全部回答
错在gets!它后面括号里的计算机会把它当成变量而不是数组第一元素的默认值!在C++中变量定义后你才能用!况且这段程序是检策到第一空字符串停止,你定义数组元素为八十,C++不做下标检查会产生下标越界错误!

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

}

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

}

我这里可以啊,有什么问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我想找一本读心术的书…
cf中的荣誉值是什么啊
奥运冠军林丹是那里人呢?
有没有松原市区玩DNF东北2游戏的!
岳塘区湘潭红旗商贸城哪位知道具体地址啊
为什么我的号突然玩CF好卡了
我想把一个好友的空间弄过来但是试了好多次都
劲舞怎么老掉?
中国最古老的家族是
每年的9月20日为全国的爱牙日,爱牙日是哪一
怎样划分句子的成分(主、谓、宾…)?
掇刀区荆门金世炸酱面馆在什么地方啊,我要过
爱情什么时候才可以拥有?
该嫁个比自己大20多的有钱人还是普通百姓?(
《嘿!裘德》原唱是谁
推荐资讯
摩尔庄园 火鸡蛋
冒险岛装检测病毒乃外挂模块失败
汉口六渡桥那附近哪有学纹眉毛的学校啊
在Rt△ABC中,∠C=90°,若b=4√5,c=12,求a
崇阳县咸宁文化用品总汇这个地址怎么能查询到
吃什么能长胖哦?
关于IPOD HF-508的问题 急
这几天的中韩对抗赛选手们用SR的车子还是Z7得
为什么我电脑的部分软件显示乱码?空间显示不
谁来讲个幽默笑话
一起来看流星雨插曲一首啦啦啦的歌
QQ伴侣被官方检测到会有什么处分?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?