快捷搜索:

在C程序中处理汉字

进修过C说话的人大概无意偶尔会碰到这样一个问题:若何用变量存储汉字以及对这些变量进行操作。今朝许多C说话参考书中都没涉及到这个问题,法度榜样中多为处置惩罚英文变量和英翰墨符串,涉及到汉字的环境也大年夜都是在printf语句中输出提示信息或结果,如:

printf("请输入a,b的值:\n");

printf("输出功率为%s千瓦。\n",power);

斟酌到还有相称一部分人在进修和利用C说话,是以在这里向读者先容一下笔者在这方面摸索出来的履历。

存储汉字应该用字符数组,这一点是肯定的,关键问题是汉字在你的谋略机系统上占几个字节。多半人会觉得一个汉字肯定占两个字节,着实不然。汉字到底占几个字节,这是随系统不合而不合的,而且还依附于软件情况,如Visual Basic中汉字占一个字节。可以在你的谋略机上用strlen()函数测试一下,如:

printf("%d",strlen("谋略机"));

若输出为6,则每个汉字占两个字节;若输出12,则每个汉字占四个字节。大年夜多半系统是每个汉字占两个字节的,即上述语句输出值为6。该当留意的是一个全角字符(包括标点符号)同汉字盘踞相同的字节。本文假定每个汉字占两个字节。

这样你就可以用字符数组存储汉字了,但别忘了,因为C说话中字符串因此'\0'作为停止标记的,系统会自动加上这个标记符,而用strlen()函数测试的返回值不包括这个'\0',是以在定义和初始化字符数组时该当使数组长度最小为实际字符串长再加1,如:

static char name[7]="孙悟空"; /*数组长度为7阐明最多可寄放3个汉字*/

假如把数组长度定义为6,系统在编译时并不报错,然则当运行法度榜样时无意偶尔会莫名其妙地重复输出或多输出汉字,假如呈现这种环境,该当首先斟酌数组长度是否有问题。当然在定义的同时初始化可以省略数组长度,如:

static char array[]={"中国谋略机软件专业技巧水平考试"};

同样可以定义二维数组,下面这个二维数组可以寄放10小我名:

char member[10][8]; /*10个元素,每个元素中最多能放3个汉字(不是4个!)*/

由于二维数组member[10][8]可以当作特殊的一维数组member[0],member[1],…,member[9],这些一维数组分腕表示各行,而一行就表示了一小我名,是以假如想操作每小我名,只需写成member[0],member[1],…而不写成member[0][8],member[1][8],…。

顺便提一下,在C编译窗口中输入汉字必要中文情况。假如读者用的是DOS操作系统,那么就必要安装CCDOS或UCDOS;假如是WIN95/98操作系统,则在DOS敕令窗口中运行下面这个批处置惩罚文件即可,而不必别的安装中文DOS系统:

C:\WINDOWS>PDOS95

在C编辑窗口顶用Ctrl+空格键启动WIN95中文输入法。别的因为C法度榜样是基于DOS的,是以编辑、编译C法度榜样最好在全屏幕状态,否则轻易呈现问题。

下面给出一个实例法度榜样,它的功能是谋略出输入年份的天干地支。

#include "string.h"

main()

{

int a,b,year;

char gz[6]; /*用来表示干支的字符变量*/

/*留意:下面两个语句中{}内的引号和逗号不能为全角字符*/

static char tg[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};

static char dz[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戍","亥"};

printf("请输入一个年份:");

scanf("%d",&year);

a=(year-1804)%10; /*以1804年为参考年份,1804年是甲子年*/

b=(year-1804)%12;

strcpy(gz,tg[a]);

strcat(gz,dz[b]);

printf("%d年的干支为:%s\n",year,gz);

}

运行结果:

请输入一个年份:1999

1999年的干支为:己卯

您可能还会对下面的文章感兴趣: