CString类

来源:互联网 发布:c语言二进制转十进制 编辑:程序博客网 时间:2024/06/01 09:53

CString类没有基本类,类的声明保存在afx.h头文件中。

一个CString对象是由可变长度的字符串组成,CString类提供了函数和操作符,内存管理,使用起来比字符数字容易的多。

CString类基于TCHAE数据类型,如果你的程序采用_UNICODE字符集,则TCHAR将被定义为16位,char类型默认采用8位

CString类的初始化:

CString();

声明一个CString对象,但没有初始化该对象。

 

CString(const CString& stringSrc);

Throw(CMemoryException);

该构造函数表示将一个已经存在的CString对象拷贝到声明的CString对象中。

 

CString(TCHAR ch, int nRepeat = 1);

throw(CMemoryException);

该构造函数表示将ch这个简单字符重复nRepeat遍来创建一个CString对象。

 

CString(LPCTSTR lpch , int nLength);

throw(CMemoryException);

构造一个长度为nLength的CString对象,该对象初始化值为一个字符串数组常量指针。

 

CString(const unsigned char* psz);

Throw(CMemoryException);

根据无符号字符指针创建CString对象。

 

CString(LPCWSTR lpsz);

throw(CMemoryException);

根据一个unicode字符串来创建一个CString对象。

 

CString(LPCSTR lpsz);

throw(CMemoryException);

根据一个ansi字符串来创建一个unicode CString对象。

 

作为数组的串:

int GetLength() const;

返回该串的字节数,该函数返回值不包括空结束符”/0”,如果该CString对象被声明成unicode字符集,则会按照一个字符两个字节来计算CString对象的长度。

 

BOOL IsEmpty() const;

如果CString对象的长度为0则返回为非0,否则返回0值。

 

void Empty();

将CString对象设置为空串并且相应的释放掉内存。

 

TCHAR GetAt(int nIndex) const;

返回该串特定位置的字符,nIndex是数组的下标,从0开始,注意nIndex的范围为0到GetLength()-1。

TCHAR:

是为了统一多语言编码而设计的;

ANSI-单字符编码

           UNICODE-双字节字符编码

           UTF-8-三字节字符编码

 

TCHAR operator[](int nIndex) const;

用数组下标的方式来返回某个字符,nIndex是数组的下标,从0开始,注意nIndex的范围为0到GetLength()-1。注意你不能通过这种方式来改变该位置的字符。

 

void SetAt(int nIndex, TCHAR ch);

将CSring对象中nIndex位置的字符改为ch,注意nIndex的范围为0到GetLength()-1,注意改函数只能修改某个位置上的字符,不能增加字符。

 

operator LPCTSTR() const;

返回串数据的字符指针

 

串合并操作:

const CString& operator = (const CString& stringSrc);

throw(CMemoryException);

const CString& operator = (TCHAR ch);

throw(CMemoryException);

const CString& operator = (const unsigned char* psz);

throw(CMemoryException);

const CString& operator = (LPCWSTR lpsz);

throw(CMemoryException);

const CString& operator = (LPCSTR lpsz);

throw(CMemoryException);

赋值操作,不考虑对象的长度。

 

friend CString operator + (const CString& string1, const CString& string2);

throw(CMmeoryException);

friend CString operator + (const CString& string, TCHAR ch);

throw(CMmeoryException);

friend CString operator + (TCHAR ch, const CString& string);

throw(CMmeoryException);

friend CString operator + (const CString& string, LPCTSTR lpsz);

throw(CMmeoryException);

friend CString operator + (LPCTSTR lpsz, const CString& string);

throw(CMmeoryException);

 

const CString& operator += (const CString& string);

throw(CMemoryException);

const CString& operator += (TCHAR ch);

throw(CMemoryException);

const CString& operator += (LPCTSTR lpsz);

throw(CMemoryException);

 

比较操作符:只能使用两种CString , LPCTSTR

BOOL operator ==(const CString& s1, const CString& s2);

BOOL operator ==(const CString& s1, LPCTSTR s2);

BOOL operator ==( LPCTSTR s1, const CString& s2);

BOOL operator !=(const CString& s1, const CString& s2);

BOOL operator !=(const CString& s1, LPCTSTR s2);

BOOL operator !=( LPCTSTR s1, const CString& s2);

BOOL operator <=(const CString& s1, const CString& s2);

BOOL operator <=(const CString& s1, LPCTSTR s2);

BOOL operator <=( LPCTSTR s1, const CString& s2);

BOOL operator >=(const CString& s1, const CString& s2);

BOOL operator >=(const CString& s1, LPCTSTR s2);

BOOL operator >=( LPCTSTR s1, const CString& s2);

BOOL operator <(const CString& s1, const CString& s2);

BOOL operator <(const CString& s1, LPCTSTR s2);

BOOL operator <( LPCTSTR s1, const CString& s2);

BOOL operator >(const CString& s1, const CString& s2);

BOOL operator >(const CString& s1, LPCTSTR s2);

BOOL operator >( LPCTSTR s1, const CString& s2);

 

int Compare(LPCTSTR lpsz) const; 区别大小写字幕

该函数对两个CString对象进行,如果内容完全一致则返回0;如果长度小于lpsz,则返回为-1,如果长度一致,但内容不同,则返回-1;如果长度大于lpsz,则返回1。

 

int CompareNoCase(LPCTSTR lpsz) const; 不区分大小写字母

该函数对两个CString对象进行,如果内容完全一致则返回0;如果长度小于lpsz,则返回为-1,如果长度一致,但内容不同,则返回-1;如果长度大于lpsz,则返回1。

 

int Compare(LPCTSTR lpsz) const; 区别大小写字幕

该函数对两个CString对象进行,如果内容完全一致则返回0;如果长度小于lpsz,则返回为-1,如果长度一致,但内容不同,则返回-1;如果长度大于lpsz,则返回1。

 

int CompareNoCase(LPCTSTR lpsz) const; 不区分大小写字母

该函数对两个CString对象进行,如果内容完全一致则返回0;如果长度小于lpsz,则返回为-1,如果长度一致,但内容不同,则返回-1;如果长度大于lpsz,则返回1。

 

int Collate(LPCTSTR lpsz) const; 区别大小写字幕

该函数对两个CString对象进行,如果内容完全一致则返回0;如果长度小于lpsz,则返回为-1,如果长度一致,但内容不同,则返回-1;如果长度大于lpsz,则返回1。

 

int CollateNoCase(LPCTSTR lpsz) const; 不区分大小写字母

该函数对两个CString对象进行,如果内容完全一致则返回0;如果长度小于lpsz,则返回为-1,如果长度一致,但内容不同,则返回-1;如果长度大于lpsz,则返回1。

 

Compare和Collate 函数的区别:

Compare函数和==运算符是等效的,Compare、==、CompareNoCase可识别MBCS和Unicode,Collate区别区域性,运算比Compare慢,仅当有必要遵守当前区域指定的排序规则时,才使用Collate函数。

抽取函数:

CString Mid(int nFirst) const;

throw(CMemoryException);

从一个CString对象中提取从nFirst开始到结尾的串,返回值是CString对象,注意返回值可能为空。

 

CString Mid(int nFirst , int nCount) const;

throw(CMemoryException);

从一个CString对象中提取从nFirst开始的长度为nCount的串,返回值是CString对象,注意返回值可能为空。

注意上述两种用法,当CString对象是表示多字节的字符串时,nCount表示的是一个8为字符的长度,例,对应unicode字符集要取n个字符则需要将nCount=2*n。

 

CString Left(int nCount) const;

throw(CMemoryException);

从一个CString对象中提取从开始位置,长度为nCount的串,返回值是CString对象,注意返回值可能为空。

 

CString Right(int nCount) const;

throw(CMemoryException);

从一个CString对象中提取从结束位置,长度为nCount的串,返回值是CString对象,注意返回值可能为空。

 

CString SpanIncluding(LPCTSTR lpszCharSet) const;

throw(CMemoryException);

从原CString对象中第一个字符开始提取字符charactor与指定的LPCTSTR传进行比对,如果该字符charactor在LPCTSTR串中,则继续进行下一个字符是否在LPCTSTR串中的比较,如果不在,则将该字符前的所有字符串返回构造成一个新的CString对象,如果从第一开始就不在LPCTSTR串中,则返回一个空CString对象。

 

CString SpanExcluding(LPCTSTR lpszCharSet) const;

throw(CMemoryException);

作用与SpanIncluding函数想反,表示从CString对象中一旦找到是LPCTSTR串中字符时就返回一个CString对象。

 

转换函数:

void MakeUpper();

将CString对象里的字符全部转换为大写字符。

 

void MakeLower();

将CString对象里的字符全部转换为小写字符。

 

void MakeReverse();

将CString对象里的字符串颠倒顺序。

 

int Replace(TCHAR chOld, TCHAR chNew);

int Replace(LPCTSTR lpszOld , LPCTSTR lpszNew);

该函数返回值表示被替换的chOld、lpszOld的个数。

 

int Remove(TCHAR ch);

从一个CString对象中删除ch字符串,返回值是删除的ch字符串个数,如果该对象没有改变,表示没有ch字符串被删除,返回值为0。

 

int Insert(int nIndex, TCHAR ch);

throw(CMemoryException);

int Insert(int nIndex, LPCTSTR pstr);

throw(CMemoryException);

向CString对象插入一个字符或者字符串,从nIndex位置开始开始插入,如果nIndex为0,表示从首部开始,如果nIndex大于CString对象的长度,则会从尾部开始。该函数返回改变长度后的对象的长度。

 

int Delete(int nIndex, int nCount = 1);

throw(CMemoryException);

对CString对象进行字符或者字符串进行删除操作,从nIndex位置开始的nCount个字符从CString对象中删除,返回值为操作后CString对象的长度。

 

void Format(LPCTSTR lpszFormat,…);

void Format(UINT nFormatID,…);

将CString对象值按照lpszFormat或者nFormatID定义的格式进行了修改。

CString   str = "大夫拉萨地方";  

int   i=10;  

str.Format("%i",i);

str的最终值是"10"

lpszFormat详细内容参照:

http://msdn2.microsoft.com/en-us/library/hf4y5e3w(VS.80).aspx

里的说明。

printf Type Field Characters 

 

Character

 

 

Type

 

 

Output format

 

 

c

 

 

int or wint_t

 

 

When used with printf functions, 指定为8位字符; when used with wprintf functions, 指定位为16位字符。.

 

 

C

 

 

int or wint_t

 

 

When used with printf functions, 指定位为16位字符; when used with wprintf functions, 指定为8位字符.用法和c相反。

 

 

d

 

 

int

 

 

有符号的十进制整数

 

 

i

 

 

int

 

 

有符号的十进制整数

 

 

o

 

 

int

 

 

无符合的八进制整数

 

 

u

 

 

int

 

 

无符合的八进制整数

 

 

x

 

 

int

 

 

无符号的十六进制整数, using "abcdef."

 

 

X

 

 

int

 

 

无符号的十六进制整数, using "ABCDEF."

 

 

e

 

 

double

 

 

Signed value having the form [ – ]d.dddd e [sign]dd[d] where d is a single decimal digit, dddd is one or more decimal digits, dd[d] is two or three decimal digits depending on the output format and size of the exponent, and sign is + or –.

 

 

E

 

 

double

 

 

Identical to the e format except that E rather than e introduces the exponent.

 

 

f

 

 

double

 

 

Signed value having the form [ – ]dddd.dddd, where dddd is one or more decimal digits. The number of digits before the decimal point depends on the magnitude of the number, and the number of digits after the decimal point depends on the requested precision.

 

 

g

 

 

double

 

 

Signed value printed in f or e format, whichever is more compact for the given value and precision. The e format is used only when the exponent of the value is less than –4 or greater than or equal to the precision argument. Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.

 

 

G

 

 

double

 

 

Identical to the g format, except that E, rather than e, introduces the exponent (where appropriate).

 

 

a

 

 

double

 

 

Signed hexadecimal double precision floating point value having the form [?]0xh.hhhh p±dd, where h.hhhh are the hex digits (using lower case letters) of the mantissa, and dd are one or more digits for the exponent. The precision specifies the number of digits after the point.

 

 

A

 

 

double

 

 

Signed hexadecimal double precision floating point value having the form [?]0Xh.hhhh P±dd, where h.hhhh are the hex digits (using capital letters) of the mantissa, and dd are one or more digits for the exponent. The precision specifies the number of digits after the point.

 

 

n

 

 

Pointer to integer

 

 

Number of characters successfully written so far to the stream or buffer; this value is stored in the integer whose address is given as the argument. See Security Note below.

 

 

p

 

 

Pointer to void

 

 

Prints the address of the argument in hexadecimal digits.

 

 

s

 

 

String

 

 

When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies a wide-character string. Characters are printed up to the first null character or until the precision value is reached.

 

 

S

 

 

String

 

 

When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte–character string. Characters are printed up to the first null character or until the precision value is reached.

 

 

void FormatV(LPCTSTR lpszFormat,va_list argList);

将函数Format中关于…部分的内容用va_list变量来表示,功能和Format相同。

void TrimLeft();

void CString::TrimLeft(TCHAR chTarget);

void CString::TrimLeft(LPCTSTR lpszTargets);

当该函数没有参数时,对应一个CString对象,将去掉串的首部空白空格(新行、空格、tab字符)字符串。

当该函数有参数时,将从CString对象的开始去掉规定的字符TCHAR或字符串lpszTargets。

 

void TrimRight();

void CString::TrimRight(TCHAR chTarget);

void CString::TrimRight(LPCTSTR lpszTargets);

用法与TrimLeft相似,不过是处理CString对象的尾部字符。

 

void FormatMessage(LPCTSTR lpszFormat,…);

void FormatMessage(UINT nFormatID,…);

格式化消息字符串,

 

查找函数:

int Find(TCHAR ch) const;

int Find(LPCTSTR lpszSub) const;

int Find(TCHAR ch , int nStart) const;

int Find(LPCTSTR lpszSub , int nStart) const;

该函数用来在CString对象中查找字符ch或者字符串lpszSub,如果找到则返回第一个字符所在位置索引值。nStart表示该函数可以从规定的位置开始进行查找。

 

int ReverseFind(TCHAR ch) const;

在CString对象中找到最后一个字符ch,返回值是该位置值,如果没有找到返回-1。

 

int FindOneOf(LPCTSTR lpszCharSet) const;

从CString对象中查找到字符串lpszCharSet中任何一个字符就返回该位置值。

 

friend CArchive& operator <<(CArchive& ar, const CString& string);

throw(CMemoryException);

friend CArchive& operator >>(CArchive& ar, const CString& string);

throw(CMemoryException);

friend CDumpContext& operator <<(CDumpContext& dc, const CString& string);

throw(CMemoryException);

CArchiev<<CString:将CString对象内容写入到CArchive中。

CArchiev>>CString:将CArchive对象内容写入到CString中。

 

缓冲区访问函数:

LPTSTR GetBuffer(int nMinBufLength);

throw(CMemoryException);

返回CString对象的内容缓冲区的头指针,nMinBufLength是设定的内容缓冲区的大小,在实际的使用中采用

CString::GetBuffer(CString::GetLength())或者用CString::GetBuffer(0)

通过这个方法可以修改对象的内容。

 

void ReleaseBuffer(int nNewLength = -1);

按照nNewLength值的大小来最终确定CString对象的内容缓冲区的长度,更新CString对象内部的信息,这样才能保证下面的对象的其它操作。当使用ReleaseBuffer()或者ReleaseBuffer(-1)时,表示按照CString对象内容实际的大小来设定,会将GetBuffer()声明的多余的空间释放掉,如果ReleaseBuffer(nNewlength >0)时,则CString对象会按照nNewLength设定的值来调整CString内容。

 

LPTSTR GetBufferSetLength(int nNewLength);

throw(CMemoryException);

返回CString对象的内容缓冲区的头指针,nNewLength是设定的内容缓冲区的大小

 

 

 

 

 

 

GetBuffer(nMinBufLength)

 

 

GetBufferSetLength(nNewLength)

 

 

代码功能

 

 

CString str("ddddddddddddddd");

CString mm;

LPTSTR p;

int i;

 

p = str.GetBuffer(100);

strcpy(p,"hellohellohellohello");

str.ReleaseBuffer();

 

 

 

CString str("ddddddddddddddd");

CString mm;

LPTSTR p;

int i;

 

p = str. GetBufferSetLength(100);

strcpy(p,"hellohellohellohello");

str.ReleaseBuffer();

 

 

 

说明

 

 

调用GetBuffer(100)之前,str对象的长度是15

 

当调用GetBuffer(100)时,跟踪str对象的长度还是15

 

但是str的内容更新为” hellohellohellohello”(实际的长度为20)

 

调用ReleaseBuffer()后,str的长度为20

 

 

调用GetBuffer(100)之前,str对象的长度是15

 

当调用GetBufferSetLength(100)时,跟踪str对象的长度是100

 

但是str的内容更新为” hellohellohellohello”(实际的长度为20)

 

调用ReleaseBuffer()后,str的长度为20

 

 

void FreeExtra();

释放CString对象之前声明的不在使用的多余的内存空间,

 

LPTSTR LockBuffer();

LPTSTR UnLockBuffer();

这对函数表示对引用的内存块进行加锁解锁。调用LockBuffer(),它创建了一个字符串副本,并设置CString对象的引用计数器为-1,保护起内存区。当字符串内存区处于锁状态时,通过两种方法来保护串内容不被修改:

 

用于Windows的特殊函数:

BSTR AllocSysString() const;

throw(CMemoryException);

返回一个重新分配空间的串的指针。该函数将一个字符串转换为unicode字符集形式,使用完成后要调用SysFreeString()函数释放字符串。使用时如果你使用MFC共享动态库并在debug模式下创建应用程序则必须链接MFC042D.DLL,在申明的stdafx.h的头文件中包含afxdisp.h头文件。

原创粉丝点击