白猫lyone
2020-12-17 18:58
采纳率: 66.7%
浏览 144

C语言读取TXT文件并统计各个汉字出现的次数?

#include "stdio.h"
#include "stdlib.h"
main()
{
	
	long long c;
	char a[100]={0};
	long long b[100]={0},i,k,l,j=0;
	FILE *fp;
	fp=fopen("date.txt","r");
	if(fp==NULL)
	{
		printf("Fail!");
		exit(1);
	}
	else
	{
		while((c=getc(fp))!=EOF) 
		{
			putchar(c);
			for(i=0,k=0;a[i]!='\0';i++)
			{
				if(c==a[i]) k=1,l=i;
			}
			if(k==0) a[j++]=c;
			if(k==1) b[l]++;
		} 
		printf("\n");
		fclose(fp);
		for(i=0;a[i]!=0;i++)
		{
			putchar(a[i]);
			printf(":%d\n",b[i]);
		}

	}
}  

可以正常输出汉字,但要统计各个汉字出现的次数时就出问题了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 天际的海浪 2020-12-17 21:25
    已采纳

    getc(fp)是一个字节一个字节的读取
    而一个汉字是由两个字节组合成的(根据不同的编码也可能是3或4个字节组合一个汉字)。
    你连续用putchar(c)一个字节一个字节的输出,到显示时就会把相邻的两个字节两个字节组合显示。

    但是a这个字符数组中每个元素只能存储半个汉字(也就是一个字节)
    你每次统计的只是这半个汉字编码的出现的次数
    输出也是半个汉字+ :%d\n 输出,汉字的两个字节不相邻自然不能组合显示。
     

    点赞 打赏 评论
  • bosaidongmomo 2020-12-18 09:57

    https://blog.csdn.net/bosaidongmomo/article/details/104798965

    用wstring 去做。

    https://blog.csdn.net/qq_28388835/article/details/81172675

    什么,你嫌wstring封装的不够好,string太扯皮? 一定要用char去判断?

    建议参考第一篇文档如何 处理GBK中字

    点赞 打赏 评论

相关推荐 更多相似问题