统计某个字符在文件中出现的次数

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {

	FILE* fp = NULL;
	int count = 0;
	int ch;
	//判断参数个数是否符合要求
	if (argc < 3) {
		fprintf(stderr, "No enough parameter.\nUsage: %s <file_name> <count char>\n", argv[0]);
		exit(1);
	}
	//打开文件
	fp = fopen(argv[1], "r");
	//判断文件是否打开成功
	if (fp == NULL) {
		perror("fopen");
		exit(1);
	}
	//把文件的第一个字符负值给ch
	//这里必须用一个ch来存放fgetc的字符,如果直接用fgetc作为循环条件,并且作为if条件,if判断将不准确,因为到了if这里,fgets又往下走了一个字符,出现一个fgetc,就往下走一个,所以统计的数字会比实际数字少,例如,hello里面的l,只会被统计1个进来,统计进来的是第二个l,因为第一个被while占了,if里面的fgetc其实是第二个l了。
	ch = fgetc(fp);
	//判断ch是否为EOF
	while (ch != EOF) {
		//如果ch与第三个参数相等,count+1
		if (ch == *argv[2]) {
			count++;
		}
		//把下一个字符负值给ch,再做循环判断
		ch = fgetc(fp);
	}
	//打印输出count
	printf("%s has %d %s\n", argv[1], count, argv[2]);

	//关闭文件
	fclose(fp);
	//推出程序
	exit(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值