一道c语言问题(回答满意的话另外再加分)

来源:百度知道 编辑:UC知道 时间:2024/06/30 06:41:35
#include <stdio.h>
#define IN 1
#define OUT 0
void main ( )
{
char string[80], c;
int i, num=0, word = OUT;
gets (string);
for (i = 0; (c = string[i]) != '\0'; i++)
if (c == ' ') //判断c是否为空格
word = OUT;
else
if (word == OUT)
{
word = IN;
num++;
}
printf ("There are %d words in the line.\n", num);
}
加上下面这几句有什么作用,为什么?
word = OUT;
else
if (word == OUT)
{
word = IN;

目的:统计单词数目
if (c == ' ')
word = OUT; //空格表示单词结束
else
if (word == OUT)
{
word = IN;//非空格表示单词开始
num++;
}

比如
string[80],="hello word":
开始 word = OUT
接着 string[0]时 word = IN 单词开始 num==1
接着 string[1-4]时 word = IN (if-else派段都为假)
接着 string[5]时 word = OUT
接着 string[6]时 word = IN 单词开始 num==2

接着 string[7-9]时 word = IN (if-else派段都为假)
最后 string[10]时 退出for循环

共两个单词

word = OUT;//如果为空格标记为OUT
else
if (word == OUT)//如果前一个为空格,这一个不是空格,单词数加1,同时标记还原
{
word = IN;

是这样的,开头定义了IN=1,OUT=0
这个WORD相当于一个判断器,当c是空格的时候它被赋值0,循环。如果不是空格,则再判断前一项是不是空格,是的话计数器+1.简单来说这是一个计算单词数的程序。
这几句这么翻译:把OUT的值赋值给WORD,判断若WORD=OUT,则给WORD赋值IN。

防止出现多个连续的空格次数算多