字符串长度通常是字符串中包含的字符数,但也可能需要字符串所占的字节数。 获取字符串长度的常用方法如下:
1 .使用sizeof获取字符串长度sizeof的含义很明确,用于获取字符数组的字节数。 当然,也包括结束符“0”。 对于ANSI和UNICODE字符串,格式如下:
Sizeof(cs )/Sizeof () char ) )。
sizeof(ws )/sizeof (wchar _ t ) ) ) ) )。
可以用同样的方法获取字符数。 很明显,如果遇到“中文ABC”这样的MBCS,这种方法是行不通的。 因为sizeof ()不知道哪个char是半个字。
2.strlen ((使用获取字符串长度的strlen ) )和wcslen ) )是标准的c定义函数,分别获取ASCII字符串和宽字符串的长度。 示例:
size _ t strlen (常数字符*字符串);
size _ t wcslen (常数wchar _ t *字符串);
strlen (和wcslen ) )将“0”作为字符串的结尾,并返回不包含“0”的字符数。
3 .使用3.cstring:3360getlength ()获取字符串长度的CStringT由具有函数的CSimpleStringT类继承。
int getlength (常数throw );
GetLength ) )返回字符而不是字节数。 例如,在CStringW中,“中文ABC”的GetLength ()返回5而不是10。 关于MBCS呢? 同样,只能将一个字节作为一个字符来处理。 CStringA表示的“中文ABC”的GetLength )返回7。
4 .使用4.STD:3360string33603360size ()获取字符串长度
basic_string也有获取大小的函数
size_type length () const;
size_type size () const;
length (和size )的功能完全相同,只返回字符而不是字节数。 遇到MCBS时,其工作方式与CStringA:GetLength ()相同。
5._ bstr _ t 33603360 length (_ bstr _ t类的length,使用获取字符串长度)方法可能是获取字符数的最佳方法。 严格来说,_bstr_t并不是一个完整的字符串类,它主要提供bstr类型的封装,但_bstr_t提供length ()函数。
unsigned int length () const throw );
函数返回字符数。 有趣的是,对于MBCS字符串,将返回真正的字符数。
现在就动手
请编写以下程序,体验获取字符串长度的各种方法。
【程序4-8】获取字符串长度的各种方法
01 #include 'stdafx.h '
02 #include 'string '
03 # include ' comutil.h ' 04 # pragma comment (lib,' comsuppw.lib ) )。
05
06 using namespace std;
07
08 int main () )
09 {
10 char s1[]='中文ABC ';
11 wchar_t s2[]=L '中文ABC ';
12
使用13//sizeof获取字符串长度
14printf(sizeofs1:%d「r「n ",sizeof(S1 ) ) 15printf(sizeofs2:%d「r「n ",sizeof ) S2 "
16
使用17//strlen获取字符串长度
18printf(strlen ) S1 ) : % d“r”n,strlen )”19printf(wcslen ) S2 ) : % d“r”n,wcslen )”
20
使用21//cstring:3360getlength (获取字符串长度
22 CStringA sa=s1;
23 CStringW sw=s2;
24