如何判定CString中是否包含除中文和英文之外的字符,高手能否提供一个函数实现此功能?
BOOL isValidStr(CString s)
{
   如果s中包含除中文或英文外的其他字符,返回false,否则返回true}

解决方案 »

  1.   

    IsDBCSLeadByte()函数如何使用?MSDN中应该有详细的说明
      

  2.   

    IsDBCSLeadByte()函数 只能判断第一个字节是否是双字节字符的第一个字节 
    好像没法解决LZ的问题
      

  3.   

    期待高手给代码,能判断出cstring中含有除中文和英文以外的其它字符的就可以
      

  4.   

    如果CString中的编码是ANSI的,在中文下它只能包含GBK编码的字符,GBK编码的字符除了汉字,英文字母之外还有标点符号,图形字符,日文字符,罗马数字等等,你的意思是找出这些吗?
      

  5.   


    怎么看CString是什么编码的?
    是的,就是判断字符串中是否含有除了中文和英文外的其他字符。
      

  6.   

    你的项目用的是ANSI还是Unicode?
      

  7.   

    \u4E00-\u9FA5]汉字  
     [0-9a-zA-Z]英文英数帮你写个DEMO, VS2008下,Unicode环境
    CString strText(_T("ABC中文シサス"));
     
    char* szBuf = NULL;
    int size = WideCharToMultiByte(CP_ACP, 0, strText, -1, szBuf, 0, NULL, NULL);
    szBuf = new char[size];
    WideCharToMultiByte(CP_ACP, 0, strText, -1, szBuf, size, NULL, NULL); char szCH[20] = {0};
    char szEn[20] = {0};
    char szNum[20] = {0}; int nCH = 0;
    int nEn = 0;
    int nNum = 0; int MAX_LEN = strlen(szBuf);
    for(int i=0; i<MAX_LEN; )
    {
    char ch = szBuf[i]; if((ch >= 'a' && ch <='z') || (ch >= 'A' && ch <='Z'))
    {
    // 字母
    szEn[nEn++] = ch;
    }
    else if(ch >= '0' && ch <= '9')
    {
    // 数字
    szNum[nNum++] = ch;
    }
    else if(ch>= 0x4e && ch <= 0x9f)
    {
    i += 1;
    if(i < MAX_LEN)
    {
    char ch2 = szBuf[i];
    if(ch2 >= 0x00 && ch2 <= 0xa5)
    {
    szCH[nCH++] = ch;
    szCH[nCH++] = ch2;
    }
    }
    }
    else // 其他字符,
    { }
    i++;
    }
    if(nEn + nCH + nNum  != MAX_LEN)
    {
    AfxMessageBox(_T("含有其他字符"));
    }
      

  8.   

    我觉得楼主问的不清楚。
    要先搞清楚哪些东西算是英文,是不是只有a-z的26个字母?另外还有编码的问题,即UNICODE非和UNICODE两种,对于同一个字母a,两种编码都可以,所以,用是否2个字节来判断是不可取的,否则,就只能认为UNICODE编码的a不是英文字母,但显然这样认为是不合正常使用者的习惯的