/***********************************************************************************
功能:统计输入英语中单词的个数
思路:1.用状态机的思想解决,当state=1时,input=0则word++;
2.把找到的单词单独打印出来
方法:a用指针p标记第一个字符位置,
b用计数器counter记录需要打印的字符个数
***********************************************************************************/
#include <stdio.h>
int GetInputType(char c) //判断传入的字符是否为英文字符
{
if (('a'<= c) && (c <= 'z'))
return 1;
if (('A' <= c) && (c <= 'Z'))
return 1;
return 0;
}
int main()
{
int input=0;//记录输入的类型 1为字符,0为其他
int state=0;//记录状态
int words=0;//统计的单词数目
int i=0;
char* p=NULL;//p指针记录开始打印的位置
int counter=0;//计数器,标记要打印字符的数目
char buf[] = " my name is kwen,and you?";
//input: 01100111101101111011101110
//state: 001100111101101111011101110
//print: p
//counter: ++
printf("buf[] = %s\n",buf);
while(1)
{
char c =buf[i];
input = GetInputType(c);
printf("c=%c,input=%d\n",c,input);
if(state == 0 && input == 0)
{
state=0;
}
else
if(state == 0 && input == 1)
{
state = 1;
p = &buf[i];//找到字符,把字符的地址赋给P
counter=1; //计数第一个字符
}
else
if(state == 1 && input == 0)
{
int j=0;
words++;
state=0;
printf("%d words had found\n",words);
for(j=0;j<counter;j++)
{
printf("%c",p[j]);
}
printf("\n");
}
else
if(state == 1 && input == 1)
{
state=1;
counter++;//依然是字符,则计数器自增1
}
if(c == '\0')
break;
i++;
}
printf("There were %d words had found!\n",words);
return 0;
}