如何在C语言中使用汉字作为if的判断语句

如何在C语言中使用汉字作为if的判断语句,第1张

直观点可以用strcmp函数,如果想用直接用==或!=来判断,你要先把汉字换成一个unsigned
short型,要比较的汉字也放入一个unsigned
short型,就可以用==或!=判断:
例如unsigned
short
a=0xd6d0;
//0xd6d0表示"中"字,
if(a==0xd6d0)
printf(“这是中字");

每个汉字都用2个字节表示,这两个字节必须都大于0xa0,所以汉字的两个字节必须是无符号型(unsigned)。
例程:
unsigned char ch[2];
//把汉字赋值给ch[2]
代码略
if ((ch[0]>0xa0) && (ch[1]>0xa0))
{
// 汉字处理
}
else
{
// 字符处理
}

ASCII码和汉字码2008-10-08 14:28 国家标准汉字字符集GB2312-80共收集了共7445个汉字和图形符号,其中汉字6763个,分为二级,一级汉字 3755个,二级汉字3008个。汉字图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为一个“位”。区的序号和位的序号都是从01到94,
UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。在文件 HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。在文件ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16个字节。
在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0A0H就得该汉字的区位码。
例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为0B7BFH- 0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32×[(23-1) ×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。
ASCII码的显示与汉字的显示原理相同,在ASC16文件中不存在机内码的问题,其显示点阵直接按ASCII码从小到大依次排列,不过每个ASCII码在文本中只占1个字节并且小于80h,每个ASCII码为8X16点阵,即在ASCII16文件中,每个ASCII码的点阵也只占16个字节。

先将输入的字符放入一个字符数组中,然后与另一个输入了中文字符的数组进行比较,用字符串比较库函数进行比较。
示例程序:
#include "stdioh"
#include"stringh"
void main()
{
char ch[20]={0},ch2[20]="你好";
scanf("%s",ch);
if(strcmp(ch,ch2))
printf("你输入的不对");
else
printf("你输入正确了");
}

定义一个字符串就可以为了

然后用

strcpy()比较

#include <stdioh>
#include <stringh>
int main(void)
{
   char s[100];
   printf("请输入汉字");
   gets(s);
   if(strcpy(s,"哈哈"))
   printf("Yes!");
   
}

汉字用两个字节编码,且机内码的每字节最高位都是1。所以对于含有汉字的字符串a,可以用if(a[i]&0x80
&&
a[i+1]&0x80)来判断,若()内为真则为汉字,否则不是。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13245356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-25
下一篇 2023-06-25

发表评论

登录后才能评论

评论列表(0条)

保存