C++ 获取字符串中的中文、英文、数字等

在 C++ 编程中经常处理 Unicode 编码的字符串,Unicode 通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为 0 就可以。每一个字符在 Unicode 编码表中对应为一个编号。例如:B 对应 0042

在 Unicode 编码表中:

      数字的编码范围为:0x0030 - 0x0039, 小写英文字母的范围:0x0061 - 0x007A

       大写英文字母范围:0x0041 - 0x005A,  汉子的编码范围: 0x4E00 - 0x9FFF

具体编码对照可以查看:Unicode 编码对照表

因此我们获取字符串中的中文、英文等的思路就是获取每一个字符的编码,然后判断编码范围是否在相应的编码范围内,具体代码如下:

std::wstring tempStr = L"";
std::wstring oldStr = "中文123*&……9@English”;
for(int i = 0; i < oldStr.length(); ++i)
{
    // 获取每个字符的第一个字节
    unsigned char* pCh = (unsigned char*)&oldStr[i];
    // 数字
    if((*pCh >= 0x30 && *pCh <= 0x39) && *(pCh + 1) == 0x00)
    {
	tempStr += oldStr[i];
    }
    // 大写字母
    else if((*pCh >= 0x41 && *pCh <=0x5A)  && *(pCh + 1) == 0x00)
    {
	tempStr += oldStr[i];
    }
    // 小写字母
    else if((*pCh >= 0x61 && *pCh <= 0x7A)  && *(pCh + 1) == 0x00)
    {
	tempStr += oldStr[i];
    }
    // 希腊文字
    else if((*pCh >= 0xB1 && *pCh <= 0xC9) && *(pCh + 1) == 0x03)
    {
	tempStr += oldStr[i];
    }
    // 中文
    else if (((*pCh >= 0) && (*pCh <= 0xff)) && (*(pCh + 1) >= 0x4e && *(pCh + 1) <= 0x9f))
    {
	tempStr += oldStr[i];
    }
}

猜你喜欢

转载自blog.csdn.net/zhouguangcai8/article/details/80264184
今日推荐