当前位置:C++技术网 > 资讯 > 如何判断字符串中是否含有中文字符

如何判断字符串中是否含有中文字符

更新时间:2015-06-25 14:01:16浏览次数:1+次

    判断字符编码是否大于127,如果大于,则是英文字符所不存在的,简单的判定是中文。

    实现的原理就是:
    具体的参见《ANSI和Unicode编码内部是什么样的》,别人写的很清楚,就不重复了。

    下面是C/C++的实现方式:

#include <iostream>
bool IsChineseA(unsigned char* chBuf,int iBufSize);// - ANSI版本
bool IsChineseU(wchar_t* chBuf,int iBufSize);      // - Unicode版本
int main()
{
    using std::cout;
    unsigned char strA[] = "0这0是0含0有0中0文0的0字0符0串0";
    wchar_t strU[] = L"0";
    if(IsChineseU(strU,sizeof(strU)))
        cout<<"含有中文n";
    else
        cout<<"不含中文n";
    return 0;
}

bool IsChineseA(unsigned char* chBuf,int iBufSize)  //是否含有中文
{
    for (int i = 0 ; i < iBufSize; i++)
    {
        if (chBuf[i] > 127)
        {
            return true;  //超过ASCII编码范围
        }
    }
    return false;
}

bool IsChineseU(wchar_t* chBuf,int iBufSize)  //是否含有中文
{
    /* 
    - wchar_t类型接受参数,是方便传参,但是内部还是以单字节挨个的处理
    - 此处也可以按照宽字符形式,读取,然后直接将整个宽字符的两个字节一起的编码值拿来判断
    - 如果大于127说明一定不是英文字符。一般判断两个字节的低字节(前一个)就已经大于127了。
    - 如果图省事,就直接两个读取此宽字符,判断字符编码值就可以了。
    */

    char * pBuf = (char*)chBuf;// - 因为是对字节的解释,要转成单字节的模式,挨个字节的分析。图省事就不用这一句,那么此时需要将字符缓冲的字节大小除以2得到字符个数。
    for (int i = 0 ; i < iBufSize; i++)
    {
        if (i%2)
        {
            if (pBuf[i] > 127)
            {
                return true;  //超过ASCII编码范围
            }
        } 
    }
    return false;
}


    下面是MFC版本:

BOOL IsChinese(CString strText)  //是否含有中文
{
    int nLen = strText.GetLength();
    for (int i = 0 ; i < nLen; i++)
    {
        if (strText[i] > 127)// - 将字符的整体两个字节的编码值拿来判断
        {
            return TRUE;  //超过ASCII编码范围
        }
    }
    return FALSE;
}