CString( 二 )

5)CString对象字元串的提取操作CString Left(int nCount) const;提取该字元串左边nCount个字元的子字元串,并返回一个包含这个子字元串的拷贝的CString对象 。CString Right(int nCount) const;提取该字元串右边nCount个字元的子字元串,并返回一个包含这个子字元串的拷贝的CString对象 。CString Mid(int iFirst,int nCount) const;提取该字元串中以索引iFirst位置开始的nCount个字元组成的子字元串,并返回一个包含这个子字元串的拷贝的CString对象 。CString Mid(int iFirst) const;提取该字元串中以索引iFirst位置开始直至字元串结尾的子字元串,并返回一个包含这个子字元串的拷贝的CString对象 。例如:CString str1 = _T("jizhuomi");CString str2 = str1.Left⑶; // str2为"jiz"str2 = str1.Right⑵; // str2为"mi"str2 = str1.Mid(1,3); // str2为"izh"str2 = str1.Mid⑸; // str2为"omi"6)CString对象字元串的查找操作int Find(PCXSTR pszSub,int iStart=0) const throw();int Find(XCHAR ch,int iStart=0) const throw();在CString对象字元串的iStart索引位置开始,查找子字元串pszSub或字元ch第一次出现的位置,如果没有找到则返回-1 。int FindOneOf(PCXSTR pszCharSet) const throw();查找pszCharSet字元串中的任意字元,返回第一次出现的位置,找不到则返回-1 。int ReverseFind(XCHAR ch) const throw();从字元串末尾开始查找指定的字元ch,返回其位置,找不到则返回-1 。这里要注意,儘管是从后向前查找,但是位置的索引还是要从开始算起 。CString str = _T("jizhuomi");int nIndex1 = str.Find(_T("zh")); // nIndex1的值为2int nIndex2 = str.FindOneOf(_T("mui")); // nIndex2的值为1int nIndex3 = str.ReverseFind(_T('i')); // nIndex3的值为77)CString类对象字元串的替换与删除int Replace(PCXSTR pszOld,PCXSTR pszNew);用字元串pszNew替换CString对象中的子字元串pszOld,返回替换的字元个数 。int Replace(XCHAR chOld,XCHAR chNew);用字元chNew替换CString对象中的字元chOld,返回替换的字元个数 。int Delete(int iIndex,int nCount = 1);从字元串中删除iIndex位置开始的nCount个字元,返回删除操作后的字元串的长度 。int Remove(XCHAR chRemove);删除字元串中的所有由chRemove指定的字元,返回删除的字元个数 。例如:CString str = _T("jizhuomi");int n1 = str.Replace(_T('i'),_T('j')); // str为"jjzhuomj",n1为2int n2 = str.Delete(1,2); // str为"jhuomj",n2为6int n3 = str.Remove(_T('j')); // str为"ihuom",n3为18)CString类的格式化字元串方法使用CString类的Format成员函式可以将int、short、long、float、double等数据类型格式化为字元串对象 。void __cdecl Format(PCXSTR pszFormat,[,argument]...);参数pszFormat为格式控制字元串;参数argument可选,为要格式化的数据,一般每个argument在pszFormat中都有对应的表示其类型的子字元串,int型的argument对应的应该是"%d",float型的应对应"%f",等等 。例如:CString str;int a = 1;float b = 2.3f;str.Format(_T("a=%d,b=%f"),a,b); // str为"a=1,b=2.300000"int型把 CString 类型的数据转化成整数类型最简单的方法就是使用标準的字元串到整数转换例程 。虽然通常你怀疑使用_atoi()函式是一个好的选择,它也很少会是一个正确的选择 。如果你準备使用 Unicode 字元,你应该用_ttoi(),它在 ANSI 编码系统中被编译成_atoi(),而在 Unicode 编码系统中编译成_wtoi() 。你也可以考虑使用_tcstoul()或者_tcstol(),它们都能把字元串转化成任意进制的长整数(如二进制、八进制、十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反 。看下面的例子: CString hex = _T("FAB");CString decimal = _T("4011");ASSERT(_tcstoul(hex,0,16) == _ttoi(decimal));Thestrargument toatoiand_wtoihas the following form:[whitespace] [sign] [digits]]Awhitespaceconsists of space or tab characters, which are ignored;signis either plus (+) or minus (–); anddigitsare one or more digits.The versions of these functions with the_lsuffix are identical except that they use the locale parameter passed in instead of the current locale. For more information, seeLocale.TCHAR.H routine_UNICODE & _MBCS not defined_MBCS defined_UNICODE defined_tstoiatoiatoi_wtoi_ttoiatoiatoi_wtoi类型转换char*转换这是初学者使用 CString 时最常见的问题 。有了 C++ 的帮助,很多问题你不需要深入的去考虑它,直接拿来用就行了,但是如果你不能深入了解它的运行机制,又会有很多问题让你迷惑,特别是有些看起来没有问题的代码,却偏偏不能正常工作 。比如,你会奇怪为什幺不能写像下面这样的代码呢:CString graycat = "Gray" + "Cat";或者这样:CString graycat("Gray" + "Cat");事实上,编译器将抱怨上面的这些尝试 。为什幺呢?因为针对CString 和 LPCTSTR数据类型的各种各样的组合," +" 运算符 被定义成一个重载操作符 。而不是两个 LPCTSTR数据类型,它是底层数据类型 。你不能对基本数据(如 int、char 或者 char*)类型重载C++ 的运算符 。你可以像下面这样做:CString graycat = CString("Gray") + CString("Cat");或者这样:CString graycat = CString("Gray") + "Cat";研究一番就会发现:" +"总是使用在至少有一个 CString 对象和一个 LPCSTR 的场合 。注意,编写有 Unicode 意识的代码总是一件好事,比如:CString graycat = CString(_T("Gray")) + _T("Cat"); 这将使得你的代码可以直接移植 。char* 转化为 CString你有一个 char* 类型的数据,或者说一个字元串 。怎幺样创建 CString 对象呢?这里有一些例子:char * p = "This is a test";或者像下面这样更具有 Unicode 意识:TCHAR * p = _T("This is a test")或LPTSTR p = _T("This is a test");你可以使用下面任意一种写法:CString s = "This is a test"; // 8-bit onlyCString s = _T("This is a test"); // Unicode-awareCString s("This is a test"); // 8-bit onlyCString s(_T("This is a test")); // Unicode-awareCString s = p;CString s(p);