初学c语言的一个搞不清楚的问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:52:22
有一个例子:输入一行字符号,统计其中有多少个单词,单词子间用空格分开.
#include <stdio.h>
void main()
{
char string[81]
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 word in the line.\n".num);
}
我的问题1:if(c=='') word=0;这句中 word的值为0,那么下一句else if(word==0)应该是否定了上一句,那么为什么还会出现wrod==0 ????这两句是说如果c为空格那么word=0;;c不是空格(如果word=0)怎么可能???就好象是在说如果你是喝了水,那么水会流到你肚子里;;你没喝水(如果水流到了的肚子里),没喝水水怎么会在肚子里???这是怎么一回事哦请解释一下哈.
问题2:请把这到题的设计思路说一下.谢谢~~~~~^^说的好我还会加分.
for(i=0;(c=string[i]!='\0';i++) 我少打了个括号,
应该是for(i=0;(c=string[i])!='\0';i++)

这个程序是要好好思考下才能弄懂
解题的思路是这样的:单词的数目可以由空格出现的次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内).如果测出某一个字符为非空格,而它前面的字符是空格,则表示"新的单词开始了",此时使num(单词数)累加1.如果当前字符为非空格而前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应该累加.前面一个字符是否空格可以从WORD的值看出来,若WORD的值等于0,则表示前一个字符是空格;如果word等于1,则意味着前一个字符为非空格.

你可以结合一个具体的例子来看一下就好理解了,
例如: 输入的字符串为:
"I am a boy."
注意是从头一个字符一个字符处理的语句:
for(i=0;(c=string[i]!='\0';i++)
对字符开始处理:
当前字符=空格?
1、成立 未出现新单词,使WORD=0,num不累加。
语句:if(c==' ')word=0;来实现。
2、不成立(两种情况)
A、前一字符为空格(word=0),新单词出现,使num加1,word=1
语句:else if(word==0)
{
word=1
num++
}
B、前一字符为非空格(word=1),未出现新单词,num不加1。

在语句:else if(word==0)
{
word=1
num++
}
中如果word=1则不执行word=1; num++;

这个程序主要是把一个字符串放在一起来考虑,因为它们是前后是有联系的主要的是word的值的变化。
自己结合一个具体的实例来分析一下就好了
例如:" I am a boy!"
程序是这样执行的:
1、读入第一个字符:空格
满足条件:if(c=='') word=0; 则word=0
2、读入第二个