空格隔开,所以空格是一个标志性的符号,可以通过空格来统计单词的个数。首先,分析一下所能遇到的各种情况。相邻两个字符组合情况为:空空;空字:字空;字字。特殊情况考虑有全空,全字,空空空字空空空。
因为要兼顾前后所以需要两个变量来指示,p指示前一个初始为0,C指示当前。
for循环结束条件 c指到’\0’.
p==0:
C=空 不操作; C=字 临界状态,单词开始了,num++,p=1;
p==1:
C=空 单词结束了,p=0; C=字 单词未结束,不操作。
全空时,没有触发 p=0 C=字状态 num没有改变值 依然为零。
全字时,初状态p=0 所以归结到p=0 C=字的状态下,num计了一个数,后续全是p=1,C=字情况num不再增加。
空空空字空空空,持续空不操作 直到空字相邻计数,字空相邻不计数。
#include<stdio.h>
void main()
{ int i,num=0,p=0;
char str[50],c;
printf("Please input a line text:");
gets(str);
for(i=0;(c=str[i])!='\0';i++){
if(p==0&&c!=' ') {num++; p=1;}
if(p==1&&c==' ') p=0;
}
printf("There are %d words\n",num);
}
//输入一行字符,统计单词个数,单词用空格隔开。
#include<stdio.h>
void main(){
char *s;
char string[50];
printf("Please input a line text:");
gets(string);
//scanf("%s",string);对空格失效
printf("%s\n",string);
char c;
int i=0,p=0,num=0;
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') p=0;//空字符串
else if(p==0) //C!=0 but word==0 临界状态,空格后面跟着一个字符!
{ p=1;
num++;
}
printf("There's totally %d words.",num);
}