求救,C语言

[复制链接]
查看11 | 回复1 | 2007-5-1 15:27:20 | 显示全部楼层 |阅读模式
for(i=0;(c=string!='\n';i++)应改为for (i=0;(c=string)!='\0';i++)因为键盘输入的回车符'\n'是不包含在字符串中的,字符串以'\0'标志结束.条件(c=string)!='\0'是检查是否已经扫描了字符串的全部内容.if(c==' ')word=0; /* */ else if(word==0) /* */ {...}这段语句中的word用来标记前一个扫描过的字符的类型.如果word=1,则表示前一个字符是字母,也就是当前单词的一部分,否则表示前一个字符是空格,即单词的分隔符.另外需要指出的是,这段程序并不能准确地计算出一行输入中的单词个数.因为按照以上程序的逻辑,当一个单词长度大于1时,则会重复计数,造成结果的误差.可以将for循环改写成以下形式,方可计算出一行内的单词个数:#include /*后面会用到一个判断字符类型的函数,应在程序开始时包含此头文件*/for (i=0;(c=string)!='\0';++i){if (isalpha (c)) /*如果c是一个字母,则条件成立*/{if (word==0) /*如果前一个不是字母,即不是此单词的一部分*/{num++; word=1; /*为当前单词进行标记,以免重复计数*/}}else /*标记当前字符为分隔符*/word=0;}
回复

使用道具 举报

千问 | 2007-5-1 15:27:20 | 显示全部楼层
##include void main() { char string[81]; int i,num=0,word=0; char c; gets(string); for(i=0; (c=string)!='\n';i++) /*执行循环直到string末尾*/
{
if(c==' ')
word=0; /*如果遇到空格表示一个单词结束 */
else
if(word==0) /*单词结束后出现非空格num加1 */
{
word=1; /*设置是否一个单词结束,遇空格表示结束,结束就为1 */
num++;
}
printf("%d %c\n",num,c);
}printf("there are %d words in the line.\n",num);}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行