C++搜索字符串中的汉字

示例:返回输入字符串中汉字的个数:

int GetChineseCharacterCount(char *pStr)

{ int retCnt = 0; int i=0; while(pStr[i]!=0) { if(pStr[i] & 0x80) { retCnt++; i++; // 因为一个汉字两个字节 } i++; } return retCnt;

}

以下收自:

@126/blog/static/791554782011523103550237/

ord($str)&0x80来判断汉字80对应的二进制代码为1000 0000,最高位为一,代表汉字.汉字编码格式通称为10格式.一个汉字占2字节,但只代表一个字符"Windows中,中文简体字符集的编码是同时用1个字节和2个字节来表示的。当高位是0x00~0x7f时,为一个字节,高位为0x80以上时用2个字节表示"注:括号里面都是2进制当你发现一个字节的内容大于0x7f,那它肯定是个(跟另外一个字节拼凑成一个)汉字,如何判断肯定大于0x7f呢?0x7f(1111111)后面一个数就是0x80(10000000),所以想要大于0x7f,这个字节的最高位都肯定是1,我们只需要判断这个最高位是否为1就行了。判断方法:位与(相同的位都是1的才为1,否则为0):如:要判断一个数的第三位是否是1,只要跟4(100)位与,判断一个数的第2位是否为1就跟2(10)位与.同理判断第八位是否为1只要跟(10000000)也就是0x80位与了.这里为什么不用>0x7f?php可能还行,但在其他强类型语言里面,1个字节的最高位用来标示负数,,一个负数肯定不可能大于0x7f(最大的整数)再举个例子:a的assic码是97(1100001)A的assic码是65(1000001)b的assic码是98(1100010)B的assic码是66(1000010)发现一个规律:一个a-z的字母,只要是小写字母,第六位肯定是1,我们可以用这个来判断大小写:这时候只要跟用以个字母跟0x20(100000)来位与判断:if(ord($a)&0x20){ //大写}如何把所有字母改成大写?第六位的1改成0就行了:$a=’a’;$a = chr(ord($a)&(~0x20));echo $a;

人生就是一次充满未知的旅行,在乎的是沿途的风景,

C++搜索字符串中的汉字

相关文章:

你感兴趣的文章:

标签云: