//参数是待操作的字符串,返回值是过滤后的字符串
CString FilterString(CString str); 
//要求:仅允许保留英文字母/数字/汉字,不允许有半个汉字。
//主要是我不懂如何判断汉字。我要一个可以使用的函数,不是思路。谢谢!!!!!!!!!!!!!!!!

解决方案 »

  1.   


    ...
    ...
    TCHAR cChar = 0;
    for ( int i=0; i<str.GetLength() ; i++)
    {
        cChar = str[i];
        if ( (cChar>='a' && cChar<'z') &&
             (cChar>='A' && cChar<'Z') )
            continue;    if ( cChar>='0' && cChar<='9')
           continue;    if ( cChar & 0x80 )
        {   continue; i++; }
        
        TRACE("This characters is bad %d",cChar);
        str.Del(i--);
    }//  随手写的,没办法测试。
      

  2.   

    判断一个字节是不是一个汉字的头可用函数BOOL 
    IsDBCSLeadByte(BYTE TestChar);
    不过在多语言环境下最好向下面这样判断
    int nLen = str.GetLength();
    for ( int i=0; i < nLen; i++)
    {
        BYTE cChar = str[i];
        if ( cChar > 0x80 )//该字节为汉字头,可用if(IsDBCSLeadByte(cChar))替代该句
        {
           i++
           continue;
        }
    }
      

  3.   

    void FilterString(CString str, char* result)
    {
    // char* mpBuffer = new char[str.GetLength()];
    char* mpIndex = result;
    // CString strResult; for (int nIndex = 0; nIndex < str.GetLength(); nIndex ++){
    char c = str.GetAt(nIndex); if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')){
    *mpIndex ++ = c;
    } else if (c < 0){
    char temp = str[++nIndex];
    if (temp < 0){
    *mpIndex ++ = c;
    *mpIndex ++ = temp;
    }
    }
    } *mpIndex = '\0';// strResult.Format("%s", mpBuffer);// return strResult;
    }
      

  4.   

    楼上的说得不大准确。简体window中,汉字内码两个字节最高位都是1。
      

  5.   

    跟着写一个:
    CString FilterString(CString str)
    {
         CString strTmp("");
         char ichar=0;
         int iLen=str.getlength();
         for(int i=0;i<iLen;i++)
         {
             ichar=str[i];
             //略去 a-z A-Z 0-9 的处理
             if(ichar>0x80)
                {
                    strTmp+=ichar;
                    i++
                    strTmp+=ichar;
                }
         }
         return strTmp;
    }
    是这样吗?如果我是在UNICODE下该怎么办呢?
      

  6.   

    UNICODE下面没有半个汉字的说法吧
      

  7.   

    匹配汉字:
    [\u4e00-\u9fa5]vc同样可以用正则表达式的
      

  8.   

    就是啊 UNICODE模式下怎么判断呢?