C语言判断汉字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言判断汉字相关的知识,希望对你有一定的参考价值。

if(is_zh_ch(char p)!=0)
int is_zh_ch(char p)


if(~(p >> 8) == 0)

return 0;


return -1;

帮我解释下那个函数的实现 怎么回事情 要详细!

#include<stdio.h>

intmain()

inti;

unsignedchars[200];

scanf("%s",s);

for(i=0;s[i];i++)

if(s[i]>127)

printf("汉字");

i++;

elseprintf("字母");

return0;

扩展资料

C++利用汉字的ASCII编码小于0的特性判断汉字

//coding:utf-8

#include"stdio.h"

intmain()

constchar*str="ENG汉字测试ddd";

for(inti=0;str[i]!='\\0';i++)

charch=str[i];

if(ch<0)

printf("Y");

i=i+2;

else

printf("N");

//Output:NNNYYYYNNN

return0;

参考技术A 和文字表示方法有关。西文字符一个字节(char)就可以表示(ASCII码中包括了所有的西文字符),因为一个char只有8位,最多表示256个文字,因此而非西文字符的文字(UNICODE)全部用两个字节表示,机器内部的最小存储单位是字节,为了区分连续的两个char表示的是一个UNICODE还是两个西文字母,规定UNICODE码的两个字节的最高位都是1。
if(~(p >> 8) == 0) return 0;的意思是,将char p的符号位(char为8位,即最高位)右移,若是UNICODE则p>>8后为1111 1111,然后按位取反为0

其实原理上面说过了,UNICODE码最高位为1,即符号位为1,上面的代码和下面的等价:
int is_zh_ch(char p)

if(p<0) return 0;
return -1;
参考技术B   判断输入的是中文还是英文很简单:
1、首先,要确认数据类型是字符型。
2、英文或一些特殊字符的ASCII码小于0x7f。
3、中文是以区位码形式出现的,ASCII码大于0xa0。
比如:
#include <stdio.h>
#include<string.h>
int main()

char* ss="hello世界";
int i;
while(*str)

if((unsigned)*str>=161) str+=2;i++;
else str++;

printf("Chinese char number is:%d\n",i);
return 0;
参考技术C p是ASCII码表示的啊,而英文的高8位全是0,汉字的高8位不为0,所以用>>右移判断 参考技术D for(i=0;i<l;i++)

if(s[i]<0)

o++

c语言中怎样判断一行中是不是有汉字

参考技术A 中文采用UTF8,GB2312编码的,有两个字节
判断是不是该字符小于0即可

正常的字符都是0~127的,中文的编码特殊,超过这个范围了,基本上都为负值

int i;
for(i=0;i<strlen(p);i++)

if((int)p[i] <0)

printf("there is chinese character!\n");
break;

追问

if ((-1 == flag) && (CH_FLAG == ((str[i] >> 4) & 0xf)))

flag = 0; //有汉字

追答

CH_FLAG 是啥?
看样子,跟我判断的大概是一个意思

追问

CH_FLAG =0xe。你把邮箱发给我,我给你完整的程序和说明

追答

不用了
if ((-1 == flag) && (CH_FLAG == ((str[i] >> 4) & 0xf)))flag = 0; //有汉字
flag是表示是否汉字的标志,为-1表示没有置过标志,
(str[i] >> 4) & 0xf
跟你说了,一个汉字两个字节,这里右移4位,是为了每4位判断一下,如果与的结果为0xe 即二进制1110 ,高几位全是1,就是汉字了,这个是根据汉字的编码范围确定的
如果你仍不懂,加我hi吧,晚上聊,呵呵
看来你是初学,讲不明白呀:)

追问

一个有数字和汉字组成的字符串(数字位于汉字的左端或右端,如“1汉字”),怎样跳过数字,只取汉字

参考技术B 楼上说的对,可以用处理英文的手法:
例如:
#include <string.h>
...
if(strcmp(str,"是")==0) ...;//假设输入的中文字符串在str里,和“是”比较是否一样
另外,团IDC网上有许多产品团购,便宜有口碑本回答被提问者采纳
参考技术C 要看字符编码格式。
然后根据ASCII 码表

以上是关于C语言判断汉字的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何判断输入的字符串是不是有汉字

求c语言高手!!!如何用if判断输入的汉字

C语言判断一句中文里是不是包含的有某个汉字或多个汉字

请问如何用C语言实现汉字,和Unicode编码的转换?

如何用C语言编写一个程序,输出一个汉字,用方向键控制它在屏幕上的显示位置?编译器要用Visual C++6.0

c++如何判断字符串是不是全为汉字