WilliamStart 2020-12-17 18:58 采纳率: 50%
浏览 469
已采纳

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 输出,汉字的两个字节不相邻自然不能组合显示。
     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 python中yolov8pose
  • ¥20 uniapp移动端使用nvue页面的recycle-list组件,列表总数为五百多条,在下滑过程中,应用经常闪退
  • ¥15 并网逆变器怎么改离网
  • ¥500 有没有谁可以破解 kml 格式的指标公式、有偿!
  • ¥15 关于我在docker容器里重新打开文件但是一直失败的问题
  • ¥30 layui怎么实现子窗口修改完成后,用原来查询条件刷新父页面
  • ¥15 perl解释器装上之后如何使用
  • ¥20 ctf find_fake_fast错位偏移
  • ¥15 pycharm无法启动打开
  • ¥15 freertos中断使用队列传输后不能退出