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

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

int GetChineseCharacterCount(char *pStr)

{

int retCnt = 0;

int i=0;

while(pStr[i]!=0)

{

if(pStr[i] & 0x80)

{

retCnt++;

i++;    // 因为一个汉字两个字节

}

i++;

}

return retCnt;

}

以下收自:

http://blog.163.com/[email protected]/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;

时间: 2024-07-28 17:21:03

C++搜索字符串中的汉字的相关文章

提取URL的搜索字符串中的参数

1 /*--------------------------------------------------------------------------------* 2 * 功能描述:提取URL的搜索字符串中的参数 3 * 原理:这个函数用来解析来自URL的查询串中的的name=value参数对 4 * 它将name=value对存储在一个对象的属性中,并返回该对象 5 * 测试:已通过 6 * 时间:2016/10/31 7 *------------------------------

C#编程入门--将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符

将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 #region 将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 /// <summary> /// 将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 /// </summary> /// <param name="text"></param> /// <returns></returns> public static string G

字符串中寻找汉字

我们都知道,字符串中的每个字符都占一个字节,但是汉字不同,它占两个字节.而且第一个字节的高位为1,第二个字节的高位也为1.我们可以利用这个特点来判断字符串中是否含有汉字. 代码实现: bool IsTrue(char* p) { while(*p) { if((*p&0x80) && (*(p+1)&0x80))//第一个和第二个字节的高位都为1 { return true; } else p++; } return false; } int main() { char *

正则表达式 exec 获取字符串中的汉字

要求:仅获取attr中的 “编辑发起状态的执行人表单” ,路径C:\fakepath\是不固定的,可以是C:\fakepath\hhh\hhhh\ 解决: var attr = C:\fakepath\编辑发起状态的执行人表单.png 1 attr = title.split(".")[0]; // 截取到 ——> "C:\fakepath\编辑发起状态的执行人表单" 2 var reg = new RegExp('[\u4e00-\u9fa5]+$','g'

提取URL字符串的搜索字符串中的参数

function urlArgs() { var args = []; var query = location.search.substring(1); var paris = query.split("&"); for (var i = 0, len = paris.length; i <= len; i++) { var pos = paris[i].indexOf('='); if (pos == -1) { continue; } var name = pari

php 正则获取字符串中的汉字preg_match_all

preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $list[$i]['iparr'], $matches); $list[$i]['iparr'] = join('', $matches[0]);

java-统计字符串中的汉字个数

1 String text = "你好,,..wo"; 2 String Reg="^[\u4e00-\u9fa5]{1}$";//正则 3 int result=0; 4 for(int i=0;i<text.length();i++){ 5 String b=Character.toString(text.charAt(i)); 6 if(b.matches(Reg)) 7 result++; 8 } 9 } 原文地址:https://www.cnblog

转换字符串中汉字为其拼音缩写(C#)

第一种方法 转换字符串中汉字为其拼音缩写(C#) //将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符.    public string GetPinYin(string text)   {    char pinyin;    byte[] array;    System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length); foreach(char c in text)    {     piny

Excel中如何提取字符串中的数字

取字符串中的数字,假如数据在A列,提取公式为 =LOOKUP(9^9,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&5^19)),ROW($1:$99)))   如果字符串中只有汉字和数字,提取公式为 =MIDB(A1,SEARCHB("?",A1),2*LEN(A1)-LENB(A1))   还有一个强大的VLOOKUP函数,在此标记.