状态机实现文件单词统计
状态机有两种状态:①在字符外(OUT) ②在字符中(IN)
因此只需要,OUT->IN的过程,单词数量+1。初始化状态为OUT
#include<stdio.h>
#define OUT 0 //定义初始状态
#define IN 1
#define INIT OUT
/*int splite(char c){
if((' ' == c) || ('\n'==c) ||('\t' ==c) || ('\"' ==c)
|| ('+' ==c) || (',' == c) || ( ';' ==c)||('.' == c))
{
return 1;
}
else{
return 0;
}
}*/
int count_word(char *filename){
int status = INIT; //状态机初始状态为init
int word = 0; //单词计数器
FILE *fp = fopen(filename,"r"); //已只读的方式打开文件
if(fp == NULL ) return -1; //打开文件出错时,fopen() 将返回一个空指针,也就是 NULL
char c;
while((c = fgetc(fp))!= EOF){
//if(splite(c)) {
if(!isalpha(c)) {//如果 c 是一个字母,则isalpha函数返回非零值,否则返回 0。
status = OUT;
} else if(OUT == status){
status =IN;
word ++; //当OUT向IN转换一次,word的值加1
}
}
return word;
}
int main(int argc,char *argv[]){
if(argc < 2) return -1; //命令行没有传入参数,返回-1
printf("word:%d\n",count_word(argv[1]));
}