C语言中如何判断中文字符

作者&投稿:捷哀 (若有异议请与网页底部的电邮联系)
c语言如何判断两个中文字符串相同~

//strcmp对中文比较识别度不高,自己编代码写
#include
#include
#include
int cmp(char *a,char *b)
{
int i=0;
while(a[i]!='\0')
{
if(a[i]!=b[i])
return 0;
i++;
}
return 1;
}
int main()
{
char a[100],b[100];
while(~scanf("%s %s",a,b))
if(strlen(a)==strlen(b))
if(cmp(a,b))
printf("yes
");
else
printf("no
");
else
printf("no
");
return 0;
}

这是跟汉字的存储方式有关,西文字符用ASCII码的话,一个字节可以表示一个字符,而汉字用的是双字节表示一个汉字。
那么,为了在机器内部区分ASCII码和汉字机内码,就规定汉字的两个字节的最高为都为1.

例如:汉字“啊”的汉字机内码为B0A1H
表示成双字节是这样的10110000 10100001

本程序用的就是判断最高位的方法。

int is_zh_ch(char p)
{

if(~(p >> 8) == 0) 将p字节进行移位运算,右移8位,这样,如果移位后是0,则说明原来的字节最高位为0,不是1那么也就不是汉字的一个字节。
{
return 0; //代表不是汉字
}

return -1;
}

这是跟汉字的存储方式有关,西文字符用ASCII码的话,一个字节可以表示一个字符,而汉字用的是双字节表示一个汉字。
那么,为了在机器内部区分ASCII码和汉字机内码,就规定汉字的两个字节的最高为都为1.

例如:汉字“啊”的汉字机内码为B0A1H
表示成双字节是这样的10110000 10100001

本程序用的就是判断最高位的方法。

int is_zh_ch(char p)
{

if(~(p >> 8) == 0) 将p字节进行移位运算,右移8位,这样,如果移位后是0,则说明原来的字节最高位为0,不是1那么也就不是汉字的一个字节。
{
return 0; //代表不是汉字
}

return -1;
}

和文字表示方法有关。西文字符一个字节(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;
}

  判断输入的是中文还是英文很简单:
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;
}

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

测试过了,你看看怎么样吧
#include<stdio.h>
int main(void)
{
char s[20];
int i,j;
char a,c[3];
FILE * fp;
scanf("%s",s);
fp=fopen(s,"r");
if(!fp){
printf("open error\n");
return 1;
}
i=0;
c[2]='\0';
while((a=fgetc(fp))!=EOF){
if(a&0x80){
c[i]=a;
i++;
if(i==2){
printf("%s 是汉字\n",c);
i=0;
}
}
else i=0;
}
getchar();
getchar();
return 0;
}


C语言怎样判断用户输入的是中文?
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++;}...

C语言中如何判断中文字符?
测试过了,你看看怎么样吧\\x0d\\x0a#include\\x0d\\x0aint main(void)\\x0d\\x0a{\\x0d\\x0achar s[20];\\x0d\\x0aint i,j;\\x0d\\x0achar a,c[3];\\x0d\\x0aFILE * fp;\\x0d\\x0ascanf("%s",s);\\x0d\\x0afp=fopen(s,"r");\\x0d\\x0aif(!fp){\\x0d\\x0aprintf(...

C语言中如何判断中文字符
这是跟汉字的存储方式有关,西文字符用ASCII码的话,一个字节可以表示一个字符,而汉字用的是双字节表示一个汉字。那么,为了在机器内部区分ASCII码和汉字机内码,就规定汉字的两个字节的最高为都为1.例如:汉字“啊”的汉字机内码为B0A1H 表示成双字节是这样的10110000 10100001 本程序用的就是判断...

如何用c++语言检验文本中是否有中文?
ASCII表,逐个匹配! 不在这个范围里面的基本上就算中文了。因为中文占两个字节,每次读一个,他的ASCII值就是负数了。

c语言如何判断字符串中有几个中文,下面代码意思
即未到串尾 if(s[i]<0) \/\/汉字的ASCII码属于“扩展ASCII码”,其每个字符的码值大于127,由于字义的是char数组,每个元素的表示范围为-128~+127,所以,大于127的字符在char中表现为负数。i++,n++; \/\/判断为一个汉字,由于每个汉字占两个字节,所以这里先i+1,再记录汉字数n也加1 ...

c语言如何判断字符串中有几个中文,下面代码意思
if(s[i]<0) \/\/汉字的ASCII码属于“扩展ASCII码,其每个字符的码值大于127,由于字义的是char数组,每个元素的表示范围为-128~+127,所以,大于127的字符在char中表现为负数。i++,n++; \/\/判断为一个汉字,由于每个汉字占两个字节,所以这里先i+1,再记录汉字数n也加1 ...

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

c语言中如何判断中文的句号?
中文字符占2位,一个char是一位,当然不能比较。不正规的办法,char c[3] = "。";同时比较ff[i]和c[0]以及ff[i+1]和c[1]

c语言 如何判断是不是中文
void){chars[20];inti,j;chara,c[3];FILE*fp;scanf("%s",s);fp=fopen(s,"r");if(!fp){printf("openerror\\n");return1;}i=0;c[2]='\\0';while((a=fgetc(fp))!=EOF){if(a&0x80){c[i]=a;i++;if(i==2){printf("%s是汉字\\n",c);i=0;}}elsei=0;...

易语言判断文本中是否有中文源码
两个方法吧,一个是用正则取出中文,若取得出就判断有,若没就判断没有 一个是一个一个去取字符,字符小于0就是中文(若文本太长此方法就不能用,不然太久了)

温州市19180729748: C语言如何判断一个字符串中字符是否为指定中文字符 -
汤关垂体: BOOL findchar(char a[], char s) // a是字符串,s是需要判断的字符{ int i=0; while(a[i] != '\0') { if(s == a[i]) return true; i++; } return false;}

温州市19180729748: c语言如何识别汉字字符 -
汤关垂体: 如果判断一个字节数组是否等于 “星期一” 可以用库函数的 strcmp()进行比较.也可以 自己一个字节一个字节的 比较 如果判断汉字的话 ,直接把这个字节强转为int 看其值是小于0的就是汉字

温州市19180729748: C语言中如何判断中文字符? -
汤关垂体: 测试过了,你看看怎么样吧#include<stdio.h> int main(void) { char s[20]; int i,j; char a,c[3]; FILE * fp; scanf("%s",s); fp=fopen(s,"r"); if(!fp){ printf("open error\n"); return 1; } i=0; c[2]='\0'; while((a=fgetc(fp))!=EOF){ if(a&0x80){ c[i]=a; i++; if(i==2)...

温州市19180729748: C语言判断汉字 -
汤关垂体: #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#...

温州市19180729748: c语言如何判断输入的字符串是否有汉字 -
汤关垂体: 这是跟汉字的存储方式有关,西文字符用ASCII码的话,一个字节可以表示一个字符,而汉字用的是双字节表示一个汉字.那么,为了在机器内部区分ASCII码和汉字机内码,就规定汉字的两个字节的最高为都为1.例如:汉字“啊”的汉字机内码为B0A1H 表示成双字节是这样的10110000 10100001 本程序用的就是判断最高位的方法.int is_zh_ch(char p) { if(~(p >> 8) == 0) 将p字节进行移位运算,右移8位,这样,如果移位后是0,则说明原来的字节最高位为0,不是1那么也就不是汉字的一个字节. { return 0; //代表不是汉字 } return -1; }

温州市19180729748: c语言中怎样判断一行中是否有汉字 -
汤关垂体: 楼上说的对,可以用处理英文的手法:例如:#include ...if(strcmp(str,"是")==0) ...;//假设输入的中文字符串在str里,和“是”比较是否一样另外...

温州市19180729748: C语言中怎样判断汉字 -
汤关垂体: 汉字用两个字节编码,且机内码的每字节最高位都是1.所以对于含有汉字的字符串a,可以用if(a[i]&0x80 && a[i+1]&0x80)来判断,若()内为真则为汉字,否则不是.

温州市19180729748: C语言编程中如何判断一个字符是不是某个汉字,比如“我”. -
汤关垂体: 一个汉字是两个字符,因此需要使用字符串来判断.

温州市19180729748: c语言中怎样判断一行中是否有汉字 -
汤关垂体: 楼上说的对,可以用处理英文的手法:例如:#include <string.h>...if(strcmp(str,"是")==0) ...;//假设输入的中文字符串在str里,和“是”比较是否一样 另外,团IDC网上有许多产品团购,便宜有口碑

温州市19180729748: C语言怎样判断用户输入的是中文?
汤关垂体: //给一个例子.希望对你有帮助 #include <stdio.h> #include <string.h> void main() { char str[]="123abc万高超.,!"; char strBuf[20]={0}; int j=0,nCount=(int)strlen(str); for(int i=0;i<nCount;i++) { //如果小于0则是中文,且后面一个也是中文. if(...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网