char x[]="ab中国"
int k=strlen(x)
得到的结果是6我想得到4应该怎么写?

解决方案 »

  1.   

    CString abc;
    abc=(LPCTSTR)(LPSTR)x;
    abc.Getlength();
      

  2.   

    中文的ASCII码都在0xa0以上,查字符串的内容找出所有的这样的东东,把数字除以2。
      

  3.   


       你要计算凡是字符 〉0xa0 的就应该两个字符计为一个字长度。 自己写一个函数来计算。 例如:    int pstrlen( char *str )
        {
            int x = 0;
            int count = 0; 
     
            while( *( str + x ) != 0 )
            {
                if( *( str + x ) >= 0xa0 )
                {
                     count += 2;
                     x += 2;
                 }
                else
                {
                     count++;
                     x++;
                 }
             }        return count;
          }
      

  4.   

    CString abc;
    abc=(TCHAR)x;
    abc.Getlength();
      

  5.   

    CString abc;
    abc=(TCHAR) x;
    abc.GetLength();
      

  6.   

    char x[]="ab中国";
    int k=0;
    int len=0;
    while(k<strlen(x))
    {
        if(x[k]>=0xa1)
        {
            len++;
            k++;
            k++;
        }
        else
        {
            len++;
            k++;
        }
    }
    CString msg;
    msg.Format("长度 %d",len);
    MessageBox(msg);
      

  7.   


       建议你还是自己写一个函数,因为你不见得要用 MFC.
     
       另外你可以参考 Unicode 的资料,有更详细的解决方法。
      

  8.   

    _mbstrlen查出来的还是6;因为我不知道它有多长,怎么能一个一个地查出大于0x0A,而且也麻烦,有没有一个函数。
      

  9.   

    如果一个字符串中含有英文字母、中文字符,同时也含有ASCII码大于0x0A的特殊字符(不是中文)怎么办呀?
      

  10.   

    CString str;
    int nLen = str.GetLength();
      

  11.   

    char szBuf[128];
    CString str = (LPSTR)(LPCTSTR)szBuf;
      

  12.   

    TO qwedcxza:
    *( str + x ) 取出的数是负数故不会执行
    if( *( str + x ) >= 0xa0 )
                {
                     count += 2;
                     x += 2;
                 }
    真奇怪我看内存保存的是D6,D0,B9,FA(中国)
    取出来的却是-42,-48,-71,-6
      

  13.   

    char x[]="ab中国"使用ansi 字符TCHAR 使用了unicode 字符
     TCHAR   szBuffer [1024] ;
    _tcslen()
      

  14.   


      呵呵,那么你将 char * 改称 unsinged char *
      

  15.   


      呵呵,那么你将 char * 改称 unsinged char *
      

  16.   


       另外如果 〉0xa0 , count 应该是 += 1. 我写成 += 2 了。 
      

  17.   

    TCHAR不一定是Unicode的,TCHAR有可能定义为普通的char。用wchar_t好一点
    用ATL中的A2W可以进行转换。#include <atlbase.h>
    char x[]="ab中国";
    wchar_t *wc;USES_CONVERSION;    // A2W要用的
    wc = A2W(x);  // char转换为wchar_tprintf("len:%d\n", wcslen(wc));