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

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

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

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

【c语言】使用char数组实现对中文汉字的处理_第1张图片

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

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

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

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

#include
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
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
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才能表示.

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

你可能感兴趣的:(c语言)