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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-27
和文字表示方法有关。西文字符一个字节(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;
}
第2个回答  推荐于2017-09-14
  判断输入的是中文还是英文很简单:
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;
}
第3个回答  2010-01-26
p是ASCII码表示的啊,而英文的高8位全是0,汉字的高8位不为0,所以用>>右移判断
第4个回答  2018-07-24
for(i=0;i<l;i++)
{
if(s[i]<0)

o++

}
相似回答