Linux C/C++ 学习笔记(一):统计文件中单词数量

  状态机实现文件单词统计

状态机有两种状态:①在字符外(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])); 
	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值