#include<stdio.h>
#define IN 1
#define OUT 0
int main()
{
char string[80], c;
int i, num = 0, word = OUT; //用 num 来统计单词个数。 用 word 来判断是单词还是空格
gets(string);
for (i = 0; (c = string[i]) != '\0'; i++) // 字符数组以 '\0' 结束
if(' ' == c) //判断 c 是否为空格
word = OUT; //使得连续的若干个空格也只看作一次空格,一行开头的空格不统计
else
if(OUT == word) //保证了前一个字符必须是空格,且当前字符不是空格,num才会 +1
{
word = IN;
num++;
}
printf("There are %d words in the line.\n", num);
return 0;
}
下面进入编程学习:
(1)scanf 函数和 gets 函数的区别
格式:scanf("%s", 字符串数组);
功能:从键盘输入一以空格或回车结束的字符串放入字符数组中,并自动加 ‘\0’
例子:
char str[80]
scanf("%s", str);
当输入 hello world 时,str 将是 “hello”
格式:gets(字符数组);
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加 ‘\0’
例子:
char str[80]
gets(str);
当输入 hello world 时,str 将是 “hello world”
(2)for (i = 0; (c = string[i]) != ‘\0’; i++)
注意:字符串是一种以 ‘\0’ 结尾的字符数组
(3)
if(' ' == c) //判断 c 是否为空格
word = OUT; //使得连续的若干个空格也只看作一次空格,一行开头的空格不统计
else
if(OUT == word) //保证了前一个字符必须是空格,且当前字符不是空格,单词数量 num 才会 +1
{
word = IN;
num++;
}
这一个 else 中的 if语句用的很精妙,多读几遍,学习一下。