哪位大侠知道怎么得到字符串的字符数(不是字节数)(50)

时间:2021-08-12 22:40:42
哪位大侠知道怎么得到字符串的字符数(不是字节数)(50)
如:得到 CString str="a人" 的字符数

20 个解决方案

#1


CString::GetLength
或者lstrlen/strlen

#2


转换成Unicode再用wcslen()

#3


使用
int char_number=str.GetLength();
汉字占两个字符

#4


_mbslen and _mbstrlen return the number of multibyte characters in a multibyte-character string. _mbslen recognizes multibyte-character sequences according to the multibyte code page currently in use; it does not test for multibyte-character validity. _mbstrlen tests for multibyte-character validity and recognizes multibyte-character sequences according to the LC_CTYPE category setting of the current locale. For more information about the LC_CTYPE category, see setlocale.

#5


CString::GetLength好像不行,楼主的意思是要字符数,一个汉字字符应该由两个字节组成。

#6


up

CString str="a人" 得到2而不是3

#7


转换成Unicode

#8


_mbslen((const unsigned char*)(LPCTSTR)str);

#9


如果用UNICODE,怎么处理?
3x

#10


自己编写一个不就得了:
unsigned char c1,c2;
CString sSource("如果用UNICODE,怎么处理?");  //一个假设的测试字体串
int iLength = sSource.GetLength();
long lZfCount = 0;                            //字符数
int i = 0;
while ( i < iLength)
{
   c1 = sSource.GetAt(i);
   c2 = sSource.GetAt(i + 1);
   if (c1 > 127 && c2 > 127) //如果是汉字,则是双字节
       i += 2;
   else                      //如果是一般字符,前进一字节
       i ++;
   lZfCount ++;
}
//循环结束后的lZfCount就是字符数

#11


#include "COMDEF.H"

CString str="a人";  
    _bstr_t strTemp;
strTemp=str;
    int len=strTemp.length();

#12


GetLengthb()
就是了,汉字也看作一个字符

#13


mark一下

#14


转换成 UniCode, 再除以二

#15


是呀,要得到字符数比字节数要简单呀,是不是题目有问题?

#16


GetLength

#17


CString.GetLength()   行了。我4过

#18


void CDlgcsdn20Dlg::OnButton3() 
{
CString str = "3个中国人!";

int nLen = str.GetLength();//10

nLen = MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,str,-1,NULL,0) - 1;//6

}

#19


技术上可行
符合你的要求吗?
如果不明白,你可以
(1),给我发短消息(请附帖子的地址).
(2),根据http://www.vcshare.net上的联系方式与我联系,推荐QQ.
(3),如果问题简单,请在http://www.vcshare.net/bbs上发帖.
    如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
    同时在www.csdn.net上发帖,并给出在我的论坛的链接.
---------------
压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.

#20


//功能:字符串字数计算
int StrLenEx(CString &strText)
{
    int nByte = strText.GetLength() ;
    int nWord = 0 ;
    for( int i=0; i<nByte; i++ )
    {
        nWord ++ ;
        if( IsDBCSLeadByte( strText[i] ) )
            i ++ ;
     }
    return nWord ;
}

#1


CString::GetLength
或者lstrlen/strlen

#2


转换成Unicode再用wcslen()

#3


使用
int char_number=str.GetLength();
汉字占两个字符

#4


_mbslen and _mbstrlen return the number of multibyte characters in a multibyte-character string. _mbslen recognizes multibyte-character sequences according to the multibyte code page currently in use; it does not test for multibyte-character validity. _mbstrlen tests for multibyte-character validity and recognizes multibyte-character sequences according to the LC_CTYPE category setting of the current locale. For more information about the LC_CTYPE category, see setlocale.

#5


CString::GetLength好像不行,楼主的意思是要字符数,一个汉字字符应该由两个字节组成。

#6


up

CString str="a人" 得到2而不是3

#7


转换成Unicode

#8


_mbslen((const unsigned char*)(LPCTSTR)str);

#9


如果用UNICODE,怎么处理?
3x

#10


自己编写一个不就得了:
unsigned char c1,c2;
CString sSource("如果用UNICODE,怎么处理?");  //一个假设的测试字体串
int iLength = sSource.GetLength();
long lZfCount = 0;                            //字符数
int i = 0;
while ( i < iLength)
{
   c1 = sSource.GetAt(i);
   c2 = sSource.GetAt(i + 1);
   if (c1 > 127 && c2 > 127) //如果是汉字,则是双字节
       i += 2;
   else                      //如果是一般字符,前进一字节
       i ++;
   lZfCount ++;
}
//循环结束后的lZfCount就是字符数

#11


#include "COMDEF.H"

CString str="a人";  
    _bstr_t strTemp;
strTemp=str;
    int len=strTemp.length();

#12


GetLengthb()
就是了,汉字也看作一个字符

#13


mark一下

#14


转换成 UniCode, 再除以二

#15


是呀,要得到字符数比字节数要简单呀,是不是题目有问题?

#16


GetLength

#17


CString.GetLength()   行了。我4过

#18


void CDlgcsdn20Dlg::OnButton3() 
{
CString str = "3个中国人!";

int nLen = str.GetLength();//10

nLen = MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,str,-1,NULL,0) - 1;//6

}

#19


技术上可行
符合你的要求吗?
如果不明白,你可以
(1),给我发短消息(请附帖子的地址).
(2),根据http://www.vcshare.net上的联系方式与我联系,推荐QQ.
(3),如果问题简单,请在http://www.vcshare.net/bbs上发帖.
    如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
    同时在www.csdn.net上发帖,并给出在我的论坛的链接.
---------------
压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.

#20


//功能:字符串字数计算
int StrLenEx(CString &strText)
{
    int nByte = strText.GetLength() ;
    int nWord = 0 ;
    for( int i=0; i<nByte; i++ )
    {
        nWord ++ ;
        if( IsDBCSLeadByte( strText[i] ) )
            i ++ ;
     }
    return nWord ;
}