以下是书上的一题,我也觉的代码写得莫名其妙,不知哪里不对?我运行了一下发现也不行。请帮我看看,谢谢!
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
#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);
}