[2]若不为空格,则未出现新单词,number不变。

前一个字符是否为空格,可以根据word的值判断,若word为0,则表示前一个字符为空格;若word为1,则表示前一个字符不为空格。

#include<stdio.h>
#include<string.h>
int main() {
	int i,number=0, word=0;
	char str[100];
	printf("请输入字符串:");
	gets(str);
	for (i = 0; str[i]!='\0'; i++) {
		if (str[i] == ' ') 		//当前字符为' ',未出现新单词
			word = 0;
		else {					//当前字符不为空格
			if (word == 0) {	//如果前一个字符为空格,则表示出现了新单词,number++,word置1
				number++;
				word = 1;
	printf("该字符串中包含%d个单词\n", number);
	return 0;

运行结果:

析题目,问题的关键是怎么确定“出现了一个新单词”。可以采取这样的方法: 从第一个符开始逐个符进行检查,判断此符是否是新单词的开头,如果是,就使变量mum的值加1(用变量mum统计单词数),最后得到的mum的值就是单词总数。 我编写的程序如下: 在程序运行时,出现了结果错误。 原因是:(1)scanf%s在输入空格或回车时会结束输入 (2)符串的结束符号是'\0' (3)if判断语句要用双等号 解决办法是: 将输入换成gets,gets只有在输入回车时才会结束输入