如:得到 CString str="a人" 的字符数
20 个解决方案
#1
CString::GetLength
或者lstrlen/strlen
或者lstrlen/strlen
#2
转换成Unicode再用wcslen()
#3
使用
int char_number=str.GetLength();
汉字占两个字符
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
CString str="a人" 得到2而不是3
#7
转换成Unicode
#8
_mbslen((const unsigned char*)(LPCTSTR)str);
#9
如果用UNICODE,怎么处理?
3x
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就是字符数
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();
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
}
{
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.
符合你的要求吗?
如果不明白,你可以
(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 ;
}
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
或者lstrlen/strlen
#2
转换成Unicode再用wcslen()
#3
使用
int char_number=str.GetLength();
汉字占两个字符
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
CString str="a人" 得到2而不是3
#7
转换成Unicode
#8
_mbslen((const unsigned char*)(LPCTSTR)str);
#9
如果用UNICODE,怎么处理?
3x
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就是字符数
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();
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
}
{
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.
符合你的要求吗?
如果不明白,你可以
(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 ;
}
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 ;
}