高清人像照片:CString类

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 03:59:50
CString类2009-09-23 13:52

CString是MFC对字符串的封装, 它包含一个可变长的字符序列, 提供了很多串操作, 使用它比使用其他的字符串类型更加方便. CString没有继承任何类.CString中的各个字符都是TCHAR类型的, 它在UNICODE中是16位, 在普通字符集中是8位. CString对象可以随着串合并操作而动态增长其长度,而无须用户来对其长度进行专门设置. 你最好把CString看作一个串类型,而不是一个指向字符串的指针; 但CString可以转换为const char*和LPCTSTR类型, 也就是说, 以const char*和LPCTSTR为参数,也可以以CString作为参数进行调用.

一、CString的构造函数

CString类拥有众多的构造函数, 用于以不同的数据类型和不同的方式构造一个字符串对象: CString(); //无参数的构造函数,产生一个空的CString对象 CString(const CString& stringSrc); //用另一个CString对象的值初始化对象 CString(TCHAR ch, int nRepeat=1);//用一个字符重复若干次来初始化对象 CString(LPCTSTR lpch, int nLength);//用一个字符数组和一定长度来初始化对象 CString(const unsigned char* psz);//从一个无符号字符指针构造对象 CString(LPCWSTR lpsz);//从一个Unicode字符串来构造对象 CString(LPCSTR lpsz);//从一个ANSI字符串构造对象 可以把某些构造函数看作于类型转化。下面是一些例子: CString s1; CString s2("big"); CString s3 = s2; CString s4(S2 + " " + s3); CString s5(" x"); //s5=" x"; CString s6(" x",7); //s6=" xxxxxxx"; CString s7((LPCSTR)ID_FILE_NEW); //ID_FILE_NEW是一个资源ID CString city="Beijing";//注意不是同值运算符

二、CString的基本操作

得到字符串长度:即字符串包含的字符数,用函数GetLength,它返回一个int类型的数。 BOOL IsEmpty() const; //判断字符串是否为空 void Empty();//强制字符串长度为0; TCHAR GetAt(int nIndex) const //得到字符串某位置的字符;(或者用重载后的操作符“[]”) void SetAt(int nIndex, TCHAR ch)//设置字符串某位置的字符; operator LPCTSTR;强制转换为字符串指针类型 比如下面的代码得到字符串最后一个字符: CString str=" aabbcde"; char c1 = str.GetAt(str.GetLength()-1); //c1="e" char c2 = str[str.GetLength()-1]; //c2="e"

三、字符串赋值、合并与格式化

1. 操作符“=”, “+”, “+=”可用于字符串的赋值与合并,如: CString str1 = "ssm", str2("dy"), str3; str3 = str1; //str3 = "ssm"; str3 = str1 + str2; //str3 = "ssmdy"; str3 += str1; //str3="ssmdyssm";

2. 最常用的字符串格式化函数是CString::Format,它根据一个参数字符串(格式控制字符串)和几个变量来格式化一个串。 它的声明为: void Format(LPCTSTR lpszFormat,...); void Format(UINT nFormatID, ...); 其中lpszFormat是格式控制字符串,nFormatID是格式控制字符串的资源ID。 函数Format常常用于把其他类型的变量转换为为字符串形式,或者把几个不同类型的值合并成一个字符串的形式。下面代码演示如何把字符(char)、整数(int)、浮点数(float)及其他字符串格式化到一个CString对象。 CString str1, str2, str3; str1.Format("%c%c", 13, 10); str2.Format("float:%f, int:%d, hexint:%x", 3.48, 20, 0xFF); str3.Format("string:%s, formated float:%2.1f", "hehe", 3.14159; 函数Format的参数中不能包含对象本身,比如语句: str.Format("%s%d", str, 20); 出现在程序中将导致无法预计的后果!改成这样就没问题了: str1 = str; str.Format("%s%d", str1, 20); 此外,还有一个函数FormatMessage, 它格式化一个消息字符串,这个函数的参数与Format类似.

3. 函数LoadString用于从一个字符串资源ID得到取得字符串值。函数格式为: BOOL LoadString(UINT nID);

四、字符串的比较

CString类重载了诸如:“==”、“!=”、“>=”、“>”、“<=”、“<”等比较操作符,并且CString对象和LPCTSTR可以相互比较,如: CString s1("abc"); CString s2("abd"); ASSERT(s1

函数CompareNoCase与Compare类似,区别是它不考虑字符的大小写。

五、串提取

串提取函数根据某种原则从串中提取一个子串,相关函数包括:Mid、Left、 Right、SpanIncluding、SpanExcluding。 函数Mid、Left、Right分别根据参数取得字符串中间、左边、右边的子串。它们的声明如下:

CString Mid(int nFirst) const; //获取从nFirst位置字符开始的子串

CString Mid(int nFirst, int nCount) const; //获取从nFirst位置的字符开始包含nCount个字符的子串(即到nFirst+nCount-1位置的字符为止)

CString Left(int nCount) const; //获取左边nCount个字符所构成的子串

CString Right(int nCount) const; //获取右边nCount个字符所构成的子串 函数SpanIncluding功能是从字符串提取一段这样子串:它从本字符串第一个字符开始,直到遇到不属于特定集合的字符为止(不包含这个字 符)。这个字符集合由参数字符串给出。如果字符串所有字符都属于指定字符集合,函数返回整个子串;如果字符串第一个字符不属于指定集合,函数返回空串。

SpanIncluding的声明为: CString SpanIncluding(LPCTSTR lpszCharSet) const; 函数SpanExcluding的功能是从字符串提取这样一段子串:它从本字符串第一个字符开始,直到遇到属于特定集合的字符为止(不包含这个字 符)。这个字符集合由参数字符串给出。如果字符串所有字符都不属于指定字符集合,函数返回整个子串;如果字符串第一个字符属于指定集合,函数返回空串。

SpanExcluding的声明为: CString SpanExcluding(LPCTSTR lpszCharSet) const; 如果说Mid、Left、Right三个函数是根据位置来提取子串的话,那么SpanIncluding和SpanExcluding两个函数是根据字符特征来提取子串。

六、串转换 串转换包括对串中字符的增加、删除、大小写变换、子串替换、开头结尾空白字符清除等,相关函数有:MakeUpper、

MakeLower、 MakerReverse、 Replace、 Remove、 Insert、 Delete、 TrimLeft、 TrimRight。 (1)把串中所有字母变成大写字母:MakeUpper;相反,MakeLower把串中所有字母变成小写字母。 (2)颠倒串中所有字符的顺序:MakeReverse, 比如"abc”变成"cba“。

(3)子串替换:Replace,这个函数有两种形式,分别用于字符替换和串替换 int Replace (TCHAR chOld, TCHAR chNew); int Replace(LPCTSTR lpszOld, LPCTSTR lpszNew); 函数返回被替换掉的字符数。

(4)从本串中去掉所有的指定字符:int CString::Remove(TCHAR ch), 这个函数是区分大小写的。

(5)在本串指定位置插入一个字符或字符串:Insert, 这个函数有两种形式: int Insert(int nIndex, TCHAR ch) int Insert(int nIndex, LPCTSTR pstr)

(6)在本串指定位置删除一个字符或子串:Delete。

(7)函数TrimLeft和TrimRight分别用来清除串开头和串结尾的空白字符。空白字符包括:空格、Tab、换行符;也可以自己通过函数参数指定要清除哪些字符。TrimLeft的三种不同的形式: void TrimLeft(); void CString::TrimLeft(TCHAR chTarget); void CString::TrimLeft(LPCTSTR lpszTargets); 其中参数lpszTargets中包含了要清除的所有字符。

七、串查找 与串查找相关的函数有:Find、ReverseFind、FindOneOf。 完成串查找的基本函数是Find,它从一个串中查找一个字符或指定子串(返回第一个匹配字符或匹配串首字母的位置),并且可以指定查找的起始位置。Find的函数声明是: int Find(TCHAR ch) const; int Find(LPCTSTR lpszSub) const; int Find(TCHAR ch, int nStart) const; int Find(LPCTSTR pstr, in nStart) const; 比如下面的代码在字符串str中从第5个字符开始查找字符串"jingle、、、、