CString常用成员函数说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tlaff/article/details/73558977

CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多,CString位于头文件afx.h中。利用MFC进行编程时,我们从对话框中利用GetWindowText得到的字符串是CString类型,CString是属于MFC的类。

以下是CString常用成员函数说明:

1、CString::Find

在一个较大的字符串中查找子字符串或字符 ,返回此CString对象中与需要的子字符串或字符匹配的第一个字符的从零开始的索引;如果没有找到子字符串或字符则返回-1。
    int Find( TCHAR ch ) const;     
    int Find( LPCTSTR lpszSub ) const;     
    int Find( TCHAR ch, int nStart ) const;     
    int Find( LPCTSTR pstr, int nStart ) const;  

其中,nStart 字符串中开始搜索的字符的索引,如果是0,则是从头开始搜索。如果nStart不是0,则位于nStart之前的字符不包括在搜索之内,但是会包括nStart处的字符。

    CString s( "abcdef" );   
    int n = s.Find( 'c' ); // 结果 n = 2   
    int f = s.Find( "de" ) ; // 结果 f = 3   
    CString str("The stars are aligned");   
    int n = str.Find('e',2); //结果 n = 2  

2、CString::Mid

 CString Mid( int nFirst, int nCount ) const;

此成员函数从此CString对象中提取一个长度为nCount个字符的子串,从nFirst(从零开始的索引)指定的位置开始。此函数返回一个对所提取的字符串的拷贝,可能是空的。
nFirst 此CString对象中的要被提取的子串的第一个字符的从零开始的索引。
 nCount 要从此CString对象中提取的字符数。如果没有提供这个参数,则字符串的其余部分都被提取。

    CString s( _T("abcdef") );   
    ASSERT( s.Mid( 2, 3 ) == _T("cde") );   
    CString strBuff(buff);    //将buff由char*型转换为CString型.内容为0,0,1,1,4  
    int pos1=0,pos2=0;  
    pos2 = strBuff.Find(",",pos1);  
    if (pos2==-1) return FAULSE;  
    m_screenmode.screen_info[j].x = atoi(strBuff.Mid(pos1,pos2-pos1));  

上面的代码通过Find()和Mid()来获取逗号之间的内容,依次类推,不断变化pos1和pos2的值,就可以将每个逗号间的值全都取出来。

3、CString::Replace

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

在替换之后,该字符串有可能增长或缩短;那是因为lpszNew和lpszOld的长度不需要是相等的。两种版本形式都进行区分大小写的匹配。

4、CString::CompareNoCase
函数原型:

int CompareNoCase( LPCTSTR lpsz ) const;

返回值:
该函数对两个CString对象进行,如果内容完全一致则返回0;如果小于lpsz,则返回为-1;如果大于lpsz,则返回1。比如,利用CompareNoCase比较str与lpsz,等同于区分大小写比较str与lpsz的第一个相异字符,如果str该处的字符比lpsz大,则字符串str大于lpsz,返回1;如果str该处的字符比lpsz小,则字符串str小于lpsz,返回-1;str与lpsz内容完全一致则返回0
说明:
此成员函数通过使用通用文本函数_tcsicmp来比较这个CString对象和另一个字符串。此通用文本函数_tcsicmp是在TCHAR.H中定义 的,根据在编译时设置的字符来与_stricmp,_wcsicmp,或_mbsicmp对应。这些函数的每一个都根据当前使用的代码页来进行一次区分大 小写的比较,而且不会被现场影响。
与Compare的区别
CompareNoCase为不区分大小写比较,而Compare为区分大小写比较
比如,利用Compare比较str与lpsz,等同于区分大小写比较str与lpsz的第一个相异字符,如果str该处的字符比lpsz大,则字符串str大于lpsz,返回1;如果str该处的字符比lpsz小,则字符串str小于lpsz,返回-1;str与lpsz内容完全一致则返回0

5、BOOL IsEmpty( ) const;
测试对象是否为空,为空时返回零,不为空时返回非零
例:

    csStr="abc";
    cout<<csStr.IsEmpty();         //0;
    csStr.Empty();
    cout<<csStr.IsEmpty();         //1;

6、Trim相关函数:
Trim()方法和TrimStrat()和TrimEnd()方法
这三个方法用于删除字符串头尾出现的某些字符。Trim()删除字符串头部及尾部出现的空格,删除的过程为从外到内,直到碰到一个非空格的字符为止,所以不管前后有多少个连续的空格都会被删除掉。TrimStart()只删除字符串的头部的空格。TrimEnd()只删除字符串尾部的空格。

如果这三个函数带上字符型数组的参数,则是删除字符型数组中出现的任意字符。如

Trim("abcd".ToCharArray())

就是删除字符串头部及尾部出现的a或b或c或d字符,删除的过程直到碰到一个既不是a也不是b也不是c也不是d的字符才结束。
这里最容易引起的误会就是以为删除的是”abcd”字符串。如下例:

string s = " from dual union all ";
s = s.Trim().TrimEnd("union all".ToCharArray());

可能有人以为上面s的最终结果是”from dual”,但真正的结果是”from d”。需要注意的是这种写法执行的删除对象是字符数组中出现的任意字符,而不是这些字符连在一起组成的字符串!

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

从左删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止
例:

   csStr="aaabaacdef";
    csStr.TrimLeft('a');
    cout<<csStr;                //baacdef
    csStr="aaabaacdef";
    csStr.TrimLeft("ab");
    cout<<csStr;                //cdef
//无参数时删除空格
void TrimRight( );
void TrimRight( TCHAR chTarget );
void TrimRight( LPCTSTR lpszTargets );

从右删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止
例:

    csStr="abcdeaafaaa";
    csStr.TrimRight('a');
    cout<<csStr;               //abcdeaaf
    csStr="abcdeaafaaa";
    csStr.TrimRight("fa");
    cout<<csStr;                //abcde
    //无参数时删除空格

7、void MakeLower( );
将大写字母转换为小写字母
例:

    csStr="ABCDEF中文123456";
    csStr.MakeLower();
    cout<<csStr;                  //abcdef中文123456

8、int ReverseFind( TCHAR ch ) const;
从后向前查找第一个匹配,找到时返回下标。没找到时返回-1
例:

    csStr="abba";
    cout<<csStr.ReverseFind('a');        //3

9、int GetLength( ) const;
返回字符串的长度,不包含结尾的空字符。

    csStr="ABCDEF中文123456";
    printf("%d",csStr.GetLength());       //16

10、 int Replace( TCHAR chOld, TCHAR chNew );
函数原型:

int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );

作用:替换字串
例:

    csStr="abcdef";
    csStr.Replace('a','x');
    cout<<csStr;                    //xbcdef
    csStr="abcdef";
    csStr.Replace("abc","xyz");
    cout<<csStr;                    //xyzdef

相关说明:
_T(“”)是一个宏,他的作用是让你的程序支持Unicode编码
因为Windows使用两种字符集ANSI和UNICODE,
前者就是通常使用的单字节方式,
但这种方式处理象中文这样的双字节字符不方便,
容易出现半个汉字的情况。
而后者是双字节方式,方便处理双字节字符。

猜你喜欢

转载自blog.csdn.net/tlaff/article/details/73558977