方法一:
#include<stdio.h>
int main()
{
char a[80];
int i,sum=0,len=0;
gets(a);
len=strlen(a);//获取字符串长度,strlen()遇到'\0'停下,不计入'\0'。
a[len]=' ';//设置最后一个字符后面的内容为空格。
for(i=0;i+1<=len;i++)//为了防止数组越界,设置循环条件是i+1<=len
if(a[i]!=' '&& a[i+1]==' ')//如果是字符+空格认为一个单词的标志符号,计数
sum++;
printf("%d",sum);
return 0;
}
方法二:
#include<stdio.h>
int main()
{
char a[80];
int i,sum=0,flag=0;
gets(a);
for(i=0;a[i]!='\0';i++)
if(a[i]==' ')
flag=0;
else if(flag==0)
{
flag=1;
sum++;
}
printf("%d",sum);
return 0;
}
看了下网上的教程,全是第二种方法,主要是判断相邻字符的关系,我感觉不好理解,多了个标志位不好理解,因此写了第一种方法,逻辑上比较好理解一些。
查找单词的关键在于数组两个相邻元素的判断,方法一中判断的是单词结尾部分,也就是说检测到a[i]是个字符,而a[i+1]不是字符就认定为是一个单词,但是这样一句话的最后一个单词会不计入,所以要先计算字符串的长度,然后再最后面加一个空格。
方法二找到的是相邻元素第一个是空格,第二个是字符,还加了个标志位用于处理多个空格连续的情况,不太好理解。