【c语言】使用char数组实现对中文汉字的处理

        前言:问题来源于我做哈夫曼编码和译码实训的时候,题目要求输入一段英文或中文。然后对其中的英文或中文进行检索,才能计算出相应的哈夫结点权值,构造哈夫曼树求哈夫曼编码。

        对于中文的处理,头脑空白,只能想起一个char类型的变量无法存储中文汉字。然后我在查阅了许多对于c语言有关中文的文章之后,解决了把一个中文汉字当做变量来处理的问题。

        我们可以先用strlen函数查看中文汉字占见个字节,(这里要注意不同字符集编码下的字节长度有所不同,包括英文字母,可以用strlen查看字节数)

    我们可以发现,中文占两个字节,而char类型是一个字节长度的;因此,它的长度与char类型数据并不符合。这也就意味着我们不能像char类型一样简单操作中文字符。

     问题总有解决的办法,像GB2312这些大多汉字编码,典型的用2个字节来表式大多数常用的中文汉字,最多可以表式65536个汉字,(同时:字符在数组中的存储是连续的)

    所以我们可以用一个char数组实现对中文字符的操作,例如:

一、想要存入一个或多个中文:

#include<stdio.h>
int main()
{
	char ch[12];
	
	//输入一个中文 
	scanf("%c%c",&ch[0],&ch[1]);
	printf("%c%c",ch[0],ch[1]);
	//输入一个中文 
	scanf("%c%c",&ch[2],&ch[3]);
	printf("%c%c",ch[2],ch[3]);
	
	//输入任意个中文(不超过数组长度-1,数组有一个结束符'\0')
	scanf("%s",ch);
	printf("%s",ch); 
	return 0; 
}

 二、对其中的一些中文取出:

#include<stdio.h>
int main()
{
	char ch[15]={"这里有七个中文"}; 
	
	printf("char数组中第1个中文:\n");
	printf("%c%c\n",ch[0],ch[1]);
	
	printf("char数组中第2个中文:\n");
	printf("%c%c\n",ch[2],ch[3]);
	
	printf("全部中文:\n");
	int j=1;
	for(int i=0;i<=12;i+=2)
		printf("第%d个中文是:%c%c\n",j++,ch[i],ch[i+1]);
	return 0; 
}

三、判断两个中文是否相等:

#include<stdio.h>
int main()
{
	char ch1[3]="中";
	char ch2[3]="汉";
	char ch3[3]="汉";
	
	if(ch1[0]==ch2[0]&&ch1[1]==ch2[1])
		printf("ch1与ch2不相等\n"); 
	else printf("ch1与ch2相等\n");
	
	if(ch2[0]==ch3[0]&&ch2[1]==ch3[1])
		printf("ch2与ch3不相等\n"); 
	else printf("ch2与ch3相等\n");
	return 0; 
}

当然,如有需要也可以同时存入英文和中文;

总之,char类型一个字节用一个%c就可以表示,中文需要两个%c%c才能表示.

以上就是我的总结,如有总结不到位的地方,还望各位指点~

  • 44
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

り澄忆秋、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值