CString类

Windows 2014年07月29日 ,

如果使用MFC进行编程,那么CString类是必须要使用的类型之一,很多函数需要该类型的参数。CString是MFC中的一个类,注意区别C++语言中的头文件<cstring>,它是对C语言头文件<string.h>重新包装。另在C++标准库的std命名空间中有string类。本文结合实例对CString类的使用进行说明。http://furzoom.com/cstring-class/

CString类构造函数

构造函数有如下几种。

CString()
CString(const CString &stringSrc)
CString(TCHAR ch,int nRepeat = 1)
CString(LPCTSTR lpch, int nLength)
CString(const unsigned char *psz)
CString(LPCWSTR lpsz)
CString(LPCSTR lpsz)
  • CString()用于构造空字符串。
  • CString(const CString &stringSrc)用于构造stringSrc的副本。
  • CString(TCHAR ch,int nRepeat = 1)使用nRepeat个ch构造字符串。
  • CString(LPCTSTR lpch, int nLength)使用字符指针lpch指向的字符数组构造字符串,字符串长度为nLength,无需null结尾。
  • CString(const unsigned char *psz)使用指向unsigned char类型指针构造字符串。
  • CString(LPCWSTR lpsz)使用Unicode字符串构造字符串。
  • CString(LPCSTR lpsz)使用Ansi字符串构造字符串。

最后两个构造函数允许使用不同的字符串进行构造纯一规格的字符串,使用十分方便。

注意

  • 1.CString字符串是Unicode版还是Ansi取决于_UNICODE宏是否被定义。
  • 2.构造函数都会申请新的内存空间,如果内存空间不足,会抛出异常。

例如,

CString s1;            // 空字符串
CString s2("furzoom"); // 使用Ansi字符串"furzoom"时行构造
CString s3(s2);        // s3为"furzoom"
CString s4('f', 5);    // s4为"fffff"

CString作为数组使用

GetLength()

int GetLength( ) const

返回CString字符串的长度。

注意

  • 1.返回长度不包括结尾字符null。
  • 2.对于Unicode字符串,返回字符个数。
  • 2.对于Ansi的多字节字符,每8位长度计为1。

例如,

CString s("furzoom枫竹梦");
s.GetLength(); //如果为Unicode字符串返回10,如果为Ansi字符串返回13

IsEmpty()

BOOL IsEmpty( ) const

测试字符是否为空,也就是说字符中的长度是否为0。如果不为空,返回非0值,否则返回0。

例如,

CString s;
s.IsEmpty();// TRUE

Empty()

void Empty()

使字符串的长度为0,并释放内存空间。

例如,

CString s;
s.Empty();// s的长度0

GetAt()

TCHAR GetAt( int nIndex ) const

返回字符串中位置为nIndex的字符。从0开始。
例如,

CString s("furzoom");
TCHAR c = s.GetAt(3); // c为z

operator[]

TCHAR operator []( int nIndex ) const

功能与GetAt()相同,熟悉C语言使用起来更方便。
注意

  • 1.[]操作符结果不能作为左值,这与C语言的字符数组是不同的。如,
    s[3] = 'c';//是错误的

SetAt

void SetAt( int nIndex, TCHAR ch )

将字符串位置为nIndex的字符设置为ch。

operator LPCTSTR

operator LPCTSTR ( ) const

返回指向字符串数据的指针。
注意

  • 1.如果使用该指针改变了字符串,那么CString对象将会根据新字符串重新申请内存空间,使得之前获得的指针无效。

CString赋值操作

CString重载了如下三个赋值操作符。

  • 1.operator =
  • 2.operator +
  • 3.operator +=

CString比较操作

CString重载了如下比较操作符,使用方法同原操作相同。

  • 1.operator ==
  • 2.operator !=
  • 3.operator >
  • 4.operator <
  • 5.operator >=
  • 6.operator <=

Compare()

int Compare(LPCTSTR lpsz) const

如果2个字符串相同,返回0,如果CString大于lpsz,返回大于0的值,如果CString小于lpsz,返回小于0的值。

CompareNoCase()

int CompareNoCase( LPCTSTR lpsz) const

为不区别大小写版的Compare()。

CString截取字符串

Mid()

CString Mid( int nFirst ) const
CString Mid( int nFirst, int nCount ) const

从nFirst开始截取字符串直到最后,或者截取nCount个字符,并返回。

Left()

CString Left( int nCount ) const

返回字符串左面nCount个字符组成的字符串。

Right()

CString Right( int nCount ) const

返回字符串右面nCount个字符组成的字符串。

CString其他操作

MakeUpper()

void MakeUpper()

将字符串中字符转化为大写字符。

MakeLower()

void MakeUpper()

将字符串中字符转化为小写字符。

MakeReverse()

void MakeReverse()

将字符串中字符顺序反转。

Replace()

int Replace( TCHAR chOld, TCHAR chNew );
int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );

将字符串中的chOld字符替换为chNew,或者将子字符串lpszOld替换为lpszNew。

Remove()

int Remove(TCHAR ch)

从字符串中移除指定字符ch,返回值为移除字符的个数,如果没有移除字符,返回0。

Format()

void Format( LPCTSTR lpszFormat, ... )

格式化字符串,参数使用类型printf()函数。
例如,

CString s;
s.Format("Welcome to %s", "furzoom");// s is "Welcome to furzoom

TrimLeft()

void TrimLeft( );
void TrimLeft( TCHAR chTarget );
void TrimLeft( LPCTSTR lpszTargets );

移除字符串左侧指定字符chTarget。如果没有指定参数将移除字符串左侧的空白字符('\n','\t',' ')。移除字符串左侧在lpszTargets所有字符。
例如,

CString s(" http://furzoom./com");
s.TrimLeft(" htp:/");// s is "furzoom.com"

TrimRight()

函数使用与TrimLeft()相同,只不过针对字符串的右侧的字符。

Find()

int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR pstr, int nStart ) const;

返回字符ch或者字符串lpszSub第一次匹配的位置,nStart指定开始搜索的位置,如果没有指定则从字符串开头开始搜索。

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《CString类》
日志链接:http://furzoom.com/cstring-class/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部