CString类所有成员函数详解

合集下载

CString的成员函数详解

CString的成员函数详解

CString的成员函数详解typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;CString的构造函数:1 CString( );2 CString( const CString& stringSrc );3 CString( TCHAR ch, int nRepeat = 1 );4 CString( LPCTSTR lpch, int nLength );5 CString( const unsigned char* psz );6 CString( LPCWSTR lpsz );7 CString( LPCSTR lpsz );CString 成员函数详解:1.CString 的构造函数:// 缺省构造函数CString()例:CString csStr;// 复制构造函数CString(const CString& stringSrc)例:CString csStr("ABCDEF 中⽂ 123456");CString csStr2(csStr);// ⽤字符初始化CString(TCHAR ch, int nRepeat = 1)例:CString csStr('a', 5); // csStr = "aaaaa"// ⽤字符串前⼏个字符初始化CString(LPCTSTR lpch, int nLength)例:CString csStr("abcdef", 3); // csStr = "abc"// ⽤宽字符串初始化CString(LPCWSTR lpsz)例:wchar_t s[] = L"abcdef";CString csStr(s); // csStr = L"abcdef"// ⽤字符串初始化CString(LPCSTR lpsz)例:CString csStr("abcdef"); // csStr = "abcdef"// ⽤字符串初始化CString(const unsigned char * psz)例:const unsigned char s[] = "abcdef";const unsigned char *sp = s;CString csStr(sp); // csStr = "abcdef"2.CString 的成员函数:int GetLength( ) const;返回字符串的长度,不包含结尾的空字符。

MFC中Format函数最全用法

MFC中Format函数最全用法

函数说明Format是CString类的一个成员函数,它通过格式操作使任意类型的数据转换成一个字符串。

函数声明function Format(const Format: string; const Args: array of const): string; overload;函数功能事实上Format方法有两种形式,另外一种是三个参数的,主要区别在于它是线程安全的,但并不多用,所以这里只对第一个介绍。

Format参数是一个格式字符串,用于格式化Args里面的值的。

Args是一个变量数组,即它里面可以有多个参数,而且每个参数可以不同。

例如:Format("my name is %6s","wind");返回的是:my name is wind函数参数Format里面可以写普通的字符串,比如"my name is" ,但有些格式指令字符具有特殊意义,比如"%6s"格式指令具有以下的形式: "%" [index ":"] ["-"] [width] ["." prec] type它是以"%"开始,而以type结束,type表示一个具体的类型。

中间是用来格式化type类型的指令字符,是可选的。

各个参数的含义与用途如下;[type]type参数可选的类型有d,u,f,e,g,n,m,p,s,x.1) d 十进制数,表示一个整型值,u 和d一样是整型值,但它是无符号的,而如果它对应的值是负的,则返回时是一个2的32次方减去这个负数的绝对值。

例如:Format("this is %u",-2);返回的是:this is 42949672942)f 对应浮点数3)e科学表示法,对应整型数和浮点数例如:Format("this is %e",-2.22);返回的是:this is -2.220000E+0004)g 这个只能对应浮点型,且它会将值中多余的数去掉例如:Format("this is %g",02.200);返回的是:this is 2.25)n 只能对应浮点型,将值转化为号码的形式,看一个例子就明白了例如:Format("this is %n",4552.2176);返回的是:this is 4,552.22注意:一是,只表示到小数后两位二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开的6)m 钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化,另外它只对应于浮点值例如:Format("this is %m",9552.21);返回的是:this is ¥9,552.217)p 对应于指针类型,返回的值是指针的地址,以十六进制的形式来表示例如:Format("this is %p",p);返回的是:this is 0012F5488)s 对应字符串类型9)x 必须是一个整形值,以十六进制的形式返回例如:Format("this is %X",15);返回的是:this is F下面介绍格式化Type的指令:[index ":"] :index指示Args中参数显示的顺序。

CString字符串操作函数汇总

CString字符串操作函数汇总

int ReverseFind( TCHAR ch ) const;
从后向前查找第一个匹配,找到时返回下标。没找到时返回-1
例:csStr="abba";
cout<<csStr.ReverseFind('a'); //3
void Format( LPCTSTR lpszFormat, ... );
void MakeLower( );
将大写字母转换为小写字母
例:csStr="ABCDEF中文123456";
csStr.MakeLower();
cout<<csStr; //abcdef中文123456
int Compare( LPCTSTR lpsz ) const;
cout<<csStr.Find('b',0); //1
cout<<csStr.Find("de",4); //-1
cout<<csStr.Find("de",0); //3
//当nStart超出对象末尾时,返回-1。
//当nStart为负数时,返回-1。
CString SpanExcluding( LPCTSTR lpszCharSet ) const;
返回对象中与lpszCharSet中任意匹配的第一个字符之前的子串
例:csStr="abcdef";
cout<<csStr.SpanExcluding("cf"); //ab
csStr.TrimLeft("ab");

mfc getbuffer函数

mfc getbuffer函数

mfc getbuffer函数MFC GetBuffer函数:解析和使用在MFC(Microsoft Foundation Classes)中,GetBuffer函数是一个常用的函数之一。

它主要用于获取指向字符数组的指针,以便在MFC应用程序中对字符串进行操作。

本文将详细介绍GetBuffer 函数的用法和常见应用场景。

一、GetBuffer函数的基本用法GetBuffer函数是CString类的成员函数,在CString类中定义如下:LPTSTR GetBuffer(int nMinBufLength) const;该函数的参数nMinBufLength表示所需的最小缓冲区长度。

GetBuffer函数的返回值为指向字符数组的指针。

使用GetBuffer函数的一般步骤如下:1. 创建一个CString对象并初始化。

2. 调用GetBuffer函数获取指向字符数组的指针。

3. 对字符数组进行操作。

4. 调用ReleaseBuffer函数释放字符数组。

下面以一个简单的示例来说明GetBuffer函数的基本用法:```CString str("Hello, World!");LPTSTR pBuffer = str.GetBuffer(20);// 对字符数组进行操作str.ReleaseBuffer();```在上述示例中,首先创建了一个CString对象str并初始化为"Hello, World!"。

然后调用GetBuffer函数并指定最小缓冲区长度为20,获取指向字符数组的指针pBuffer。

接下来可以对字符数组进行操作,比如修改其中的字符或进行其他操作。

最后调用ReleaseBuffer函数释放字符数组。

二、GetBuffer函数的常见应用场景1. 字符串拼接GetBuffer函数可以用于方便地进行字符串拼接操作。

例如,当需要将多个字符串拼接成一个较长的字符串时,可以使用GetBuffer 函数获取指向字符数组的指针,并使用字符串操作函数对字符数组进行拼接。

VS2010和MFC编程入门之42(MFC常用类:CString类)

VS2010和MFC编程入门之42(MFC常用类:CString类)

VS2010MFC编程入门之四十二(MFC常用类:CString类)理解了分割窗口的有关知识,这里开始讲解MFC的一些常用类,先来说说CString类。

CString类简介CString类作为MFC的常用类,当之无愧。

可以这样说,只要是从事MFC开发,基本都会遇到使用CString类的场合。

因为字符串的使用比较普遍,而CString类又提供了对字符串的便捷操作,所以它给MFC开发人员带来了高的开发效率,受到了开发者的欢迎。

大家使用VS2010的话,可能会见到CStringT,实际上它是一个操作可变长度字符串的模板类。

CStringT模板类有三个实例:CString、CStringA和CStringW,它们分别提供对TCHAR、char和wchar_t字符类型的字符串的操作。

char类型定义的是Ansi字符,wchar_t类型定义的是Unicode字符,而TCHAR取决于MFC工程的属性对话框中的Configuration Properties->General->Character Set属性,如果此属性为Use Multi-Byte Character Set,则TCHAR类型定义的是Ansi字符,而如果为Use Unicode Character Set,则TCHAR类型定义的是Unicode字符。

三个字符串类的操作是一样的,只是处理的字符类型不同。

鸡啄米以CString类为讲解对象。

CString类的字符串操作1. CString类的构造函数CString类有很多构造函数,这里只介绍几个比较常用的:CString(constCString&stringSrc);将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。

例如:C++代码CString str1(_T("")); // 将常量字符串拷贝到str1 CString str2(str1); // 将str1的内容拷贝到str2CString(LPCTSTR lpch, intnLength);将字符串lpch中的前nLength个字符拷贝到该CString对象。

VC++ CString详解

VC++  CString详解

1、CString 对象的连接:用”+”2、格式化字符串:用CString 对象的Format()方法。

用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类替你完成。

格式化是一种把其它不是字符串类型的数据转化为CString类型的最常用技巧。

*****CString s; s.Format(_T("%d"), total);我总是对我的字符串使用_T()宏,这是为了让我的代码至少有Unicode的意识#define _T(x) x // 非Unicode版本(non-Unicode version)而在Unicode环境下是如下定义的:#define _T(x) L##x // Unicode版本(Unicode version)所以在Unicode环境下,它的效果就相当于:s.Format(L"%d", total);如果你认为你的程序可能在Unicode的环境下运行,那么开始在意用Unicode 编码。

比如说,不要用sizeof() 操作符来获得字符串的长度,因为在Unicode环境下就会有2倍的误差。

我们可以用一些方法来隐藏Unicode的一些细节,比如在我需要获得字符长度的时候,我会用一个叫做DIM的宏,这个宏是在我的dim.h文件中定义的,我会在我写的所有程序中都包含这个文件:#define DIM(x) ( sizeof((x)) / sizeof((x)[0]) )这个宏不仅可以用来解决Unicode的字符串长度的问题,也可以用在编译时定义的表格上,它可以获得表格的项数,如下:class Whatever { ... };Whatever data[] = {{ ... },...{ ... },};for(int i = 0; i < DIM(data); i++) // 扫描表格寻找匹配项。

CString

CString

CStringCString没有基类。

一个CString对象由可变长度的一队字符组成。

CString使用类似于Basic的语法提供函数和操作符。

连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组容易使用。

CString是基于TCHAR数据类型的对象。

如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。

在UNICODE方式下,CString对象由16位字符组成。

非UNICODE方式下,CString对象由8位字符组成。

当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。

注意,对于MBCS 字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。

CString对象还具有下列特征:·CString可作为连接操作的结果而增大。

·CString对象遵循“值语义”。

应将CString看作是一个真实的字符串而不是指向字符串的指针。

·你可以使用CString对象任意替换const char*和LPCTSTR函数参数。

·转换操作符使得直接访问该字符串的字符就像访问一个只读字符(C-风格的字符)数组一样。

提示:如果可能的话,应在框架中而不是堆中分配这个CString对象。

这可以节省内存并简化参数的传递。

CString允许两个具有相同值的字符串共享相同的缓冲空间,这有助于你节省内存空间。

但是,如果你初始直接改变该缓冲的内容(不使用MFC),则有可能在无意中改变了两个字符串。

CString提供了两个成员函数CString::LockBuffer 和CString::UnlockBuffer来帮助你保护你的数据。

当你调用LockBuffer时,你就创建了一个字符串的一个拷贝,然后将引用计数设置为-1,这就“加锁”了该缓冲区。

Cstring字符串比较方法详解

Cstring字符串比较方法详解

Cstring字符串比较方法详解字符串可以和类型相同的字符串相比较,也可以和具有同样字符类型的数组比较。

Basic_string 类模板既提供了 >、<、==、>=、<=、!= 等比较运算符,还提供了 compare() 函数,其中 compare() 函数支持多参数处理,支持用索引值和长度定位子串进行比较。

该函数返回一个整数来表示比较结果。

如果相比较的两个子串相同,compare() 函数返回0,否则返回非零值。

compare()函数类 basic_string 的成员函数 compare() 的原型如下:int compare (const basic_string& s) const;int compare (const Ch* p) const;int compare (size_type pos, size_type n, const basic_string& s) const;int compare (size_type pos, size_type n, const basic_string& s,size_type pos2, size_type n2) const;int compare (size_type pos, size_type n, const Ch* p, size_type = npos) const;如果在使用compare() 函数时,参数中出现了位置和大小,比较时只能用指定的子串。

例如:pare {pos,n, s2);若参与比较的两个串值相同,则函数返回0;若字符串S 按字典顺序要先于S2,则返回负值;反之,则返回正值。

下面举例说明如何使用 string 类的 compare() 函数。

【例 1】复制纯文本复制1.#include <iostream>2.#include <string>3.u sin g namespace std;4.int main ()5.{6.string A ('aBcdef');7.string B ('AbcdEf');8.string C ('123456');9.string D ('123dfg');10.//下面是各种比较方法11.int m=pare (B); //完整的A和B的比较12.int n=pare(1,5,B,4,2); //'Bcdef'和'AbcdEf'比较13.int p=pare(1,5,B,4,2); //'Bcdef'和'Ef'比较14.int q=pare(0,3,D,0,3); //'123'和'123'比较15.cout << 'm = ' << m << ', n = ' << n <<', p = ' << p << ', q = ' << q << endl;16.cin.get();17.return 0;18.}#include <iostream> #include <string> u sin g namespace std; int main () { string A ('aBcdef'); string B ('AbcdEf'); string C ('123456'); string D ('123dfg'); //下面是各种比较方法int m=pare (B); //完整的A和B的比较int n=pare(1,5,B,4,2); //'Bcdef'和'AbcdEf'比较int p=pare(1,5,B,4,2); //'Bcdef'和'Ef'比较int q=pare(0,3,D,0,3); //'123'和'123'比较 cout << 'm = ' << m << ', n = ' << n <<', p = ' << p << ', q = ' << q << endl; cin.get(); return 0; }程序的执行结果为:m = 1, n = -1, p = -1, q = 0由此可知,string 类的比较 compare() 函数使用非常方便,而且能区分字母的大小写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CString类所有成员函数详解2009-03-27 10:53CString类所有成员函数详解VC里CString是我们最常用的类之一,我们觉得对它很熟悉了,可是你知道它的所有用法吗?还是系统的学习一下吧,认真看完本文就OK了。

下面开始:CString::Compareint Compare( LPCTSTR lpsz ) const;返回值字符串一样返回0小于lpsz 返回-1大于lpsz 返回1区分大小字符CString s1( "abc" );CString s2( "abd" );ASSERT( pare( s2 ) == -1 );ASSERT( pare( "abe" ) == -1 );CString::CompareNoCaseint CompareNoCase( LPCTSTR lpsz ) const;返回值字符串一样返回0小于lpsz 返回-1大于lpsz 返回1不区分大小字符CString::Collateint Collate( LPCTSTR lpsz ) const;同CString::CompareCString::CollateNoCaseint CollateNocase( LPCTSTR lpsz ) const; 同CString::CompareNoCase CString::CStringCString( );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 s1;CString s2( "cat" );CString s3 = s2;CString s4( s2 + " " + s3 ); CString s5( 'x' ); // s5 = "x"CString s6( 'x', 6 ); // s6 = "xxxxxx"CString s7((LPCSTR)ID_FILE_NEW); // s7 = "Create a new document" CString city = "Philadelphia";CString::Deleteint Delete( int nIndex, int nCount = 1);返回值是被删除前的字符串的长度nIndex是第一个被删除的字符,nCount是一次删除几个字符。

根据我实验得出的结果:当nCount>要删除字符串的最大长度(GetCount() - nIndex)时会出错,当nCount过大,没有足够的字符删除时,此函数不执行。

例子CString str1,str2,str3;char a;str1 = "nihao";str2 = "nIhao";int x;// int i=(str1 == str2);str1.Delete(2,3);如果nCount(3) > GetCount() –nIndex (5-2)就会执行错误CString::EmptyVoid Empty( );没有返回值清空操作;例子CString s( "abc" );s.Empty();ASSERT( s.GetLength( ) == 0 );CString::Findint Find( TCHAR ch ) const;int Find( LPCTSTR lpszSub ) const;int Find( TCHAR ch, int nStart ) const;int Find( LPCTSTR lpszSub, int nStart ) const;返回值不匹配的话返回-1; 索引以0 开始nStar 代表以索引值nStart 的字符开始搜索,即为包含以索引nStart字符后的字符串例子CString s( "abcdef" );ASSERT( s.Find( 'c' ) == 2 );ASSERT( s.Find( "de" ) == 3 );Cstring str(“The stars are aligned”);Ing n = str.Find('e',5);ASSERT(n == 12)CString::FindOneOfint FindOneOf( LPCTSTR lpszCharSet ) const;返回值不匹配的话返回-1; 索引以0 开始注意::返回此字符串中第一个在lpszCharSet中也包括字符并且从零开始的索引值例子CString s( "abcdef" );ASSERT( s.FindOneOf( "xd" ) == 3 ); // 'd' is first match.CString::Formatvoid Format( LPCTSTR lpszFormat, ... );void Format( UINT nFormatID, ... );lpszFormat 一个格式控制字符串nFormatID 字符串标识符例子CString str;Str.Format(“%d”,13);此时Str为13CString::GetAtTCHAR GetAt( int nIndex ) const;返回标号为nIndex的字符,你可以把字符串理解为一个数组,GetAt类似于[].注意nIndex的范围,如果不合适会有调试错误。

CString::GetBufferLPTSTR GetBuffer( int nMinBufLength );返回值一个指向对象的(以空字符结尾的)字符缓冲区的LPTSTR 指针。

参数nMinBufLength字符缓冲区的以字符数表示的最小容量。

这个值不包括一个结尾的空字符的空间。

说明此成员函数返回一个指向CString 对象的内部字符缓冲区的指针。

返回的LPTSTR 不是const,因此可以允许直接修改CString 的内容。

如果你使用由GetBuffer 返回的指针来改变字符串的内容,你必须在使用其它的CString 成员函数之前调用ReleaseBuffer 函数。

在调用ReleaseBuffer 之后,由GetBuffer 返回的地址也许就无效了,因为其它的CString 操作可能会导致CString 缓冲区被重新分配。

如果你没有改变此CString 的长度,则缓冲区不会被重新分配。

当此CString 对象被销毁时,其缓冲区内存将被自动释放。

注意,如果你自己知道字符串的长度,则你不应该添加结尾的空字符。

但是,当你用ReleaseBuffer 来释放该缓冲区时,你必须指定最后的字符串长度。

如果你添加了结尾的空字符,你应该给ReleaseBuffer 的长度参数传递-1 ,ReleaseBuffer 将对该缓冲区执行strlen 来确定它的长度。

下面的例子说明了如何用CString::GetBuffer。

// CString::GetBuffer 例子CString s( "abcd" );#ifdef _DEBUGafxDump << "CString s " << s << "\n";#endifLPTSTR p = s.GetBuffer( 10 );strcpy( p, "Hello" ); // 直接访问CString 对象。

s.ReleaseBuffer( );#ifdef _DEBUGafxDump << "CString s " << s << "\n";#endifCString::GetLengthint GetLength( ) const;返回值返回字符串中的字节计数。

说明此成员函数用来获取这个CString 对象中的字节计数。

这个计数不包括结尾的空字符。

对于多字节字符集(MBCS),GetLength 按每一个8 位字符计数;即,在一个多字节字符中的开始和结尾字节被算作两个字节。

示例下面的例子说明了如何使用CString::GetLength。

// CString::GetLength 示例CString s( "abcdef" );ASSERT( s.GetLength() == 6 );CString::Insertint Insert( int nIndex, TCHAR ch );int Insert( int nIndex, LPCTSTR pstr );返回修改后的长度,nIndex是字符(或字符串)插入后的索引号例子CString str( “HockeyBest”);int n = str.Insert( 6, “is”);ASSERT( n == str.GetLength( ) );printf( “1: %s\n”, ( LPCTSTR ) str );n = str.Insert( 6, ' ' );ASSERT( n == str.GetLength( ) );printf ( “2: %s\n”, (LPCTSTR) STR );n = str.Insert(555, ‘1’);ASSERT( n == str.GetLength ( ) );printf ( “3: %s\n”, ( LPCTSTR ) str );输出1. Hockeyis Best2. Hockey is Best3. Hockey is Best!CString::IsEmptyBOOL IsEmpty( ) const;返回值如果CString 对象的长度为0,则返回非零值;否则返回0。

说明此成员函数用来测试一个CString 对象是否是空的。

示例下面的例子说明了如何使用CString::IsEmpty。

相关文档
最新文档