请问去哦这道编程哪里错了

来源:百度知道 编辑:UC知道 时间:2024/07/02 05:20:59
题目:读取一段文本(只包括单词和空格),统计其中有多少个1个字母的单词,2个字母的单词,3个字母的单词。。。
void main()
{
char a[50];
int i,l,max=0,b[20]={0};
gets(a);
for(i=0;a[i]!='\0';)
{ l=0;
while(a[i]!=' ')
{l++;i++;}
b[l]++;
if(max<l)
max=l;
i++;
}
for(i=1;i<=max;i++)
printf("b[%d]=%d\n",i,b[i]);
}

这是因为你统计单词的时候,是以空格作为单词结尾标记的,所以每个单词末尾都要输入一个空格,包括最后一个单词末尾也要带空格。
当输入的最后一个单词末尾没有空格时,就会出错,因为他要找空格,找不到,就会一直找下去,直到访问的数组单元越界出错。

可以把第九行该一下就行了。
{l++;i++;if(a[i]=='\0'){i--;break;}}
这样到末尾一个单词,不用找到空格就可以结束了。
即改成这样:
void main()
{
char a[50];
int i,l,max=0,b[20]={0};
gets(a);
for(i=0;a[i]!='\0';)
{ l=0;
while(a[i]!=' ')
{l++;i++;if(a[i]=='\0'){i--;break;}}
b[l]++;
if(max<l)
max=l;
i++;
}
for(i=1;i<=max;i++)
printf("b[%d]=%d\n",i,b[i]);
}

运行结果为
a b ccc ddddd
b[1]=2
b[2]=0
b[3]=1
b[4]=0
b[5]=1
Press any key to continue