手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

如何在C程式中处理汉字

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
学习过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); /*以1804年为参考年份,1804年是甲子年*/
b=(year-1804);
strcpy(gz,tg[a]);
strcat(gz,dz);
printf("%d年的干支为:%s\n",year,gz);
}

  运行结果:
请输入一个年份:1999
1999年的干支为:己卯




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS