CString相关函数及用法剖析

一、 CString类的构造函数

  CString类有很多构造函数,这里只介绍几个比较常用的:

  1、CString(const CString& stringSrc);

  将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。例如:

  CString str1(_T(jizhuomi)); // 将常量字符串拷贝到str1

  CString str2(str1); // 将str1的内容拷贝到str2

  2、CString(LPCTSTR lpch,int nLength);

  将字符串lpch中的前nLength个字符拷贝到该CString对象。例如:

  CString str(_T("wwwjizhuomi"),3); // 构造的字符串对象内容为"www"

  3、CString(TCHAR ch,int nLength = 1);

  使用此函数构造的CString对象中将含有nLength个重复的ch字符。例如:

  CString str(_T('w'),3); // str为"www"

 二、CString类的大小写转换及顺序转换函数

  CString& MakeLower(); 将字符串中的所有大写字符转换为小写字符。

  CString& MakeUpper(); 将字符串中的所有小写字符转换为大写字符。

  CString& MakeReverse(); 将字符串中所有字符的顺序颠倒。

  例如:

    CString str(_T("CString"));

    str.MakeLower(); // str为"cstring"

    str.MakeUpper(); // str为"CSTRING"

    str.MakeReverse(); // str为"GNIRTSC"

 三、CString对象的连接

  多个CString对象的连接可以通过重载运算符+、+=实现。例如:

    CString str(_T("CString")); // str内容为"CString"

  str = _T("www") + str + _T("-"); // str为"wwwCString-"

  str += _T("com"); // str为wwwCString-com

 四、CString对象的比较

  CString对象的比较可以通过==、。=、<;、>;、<=、>=等重载运算符实现,也可以使用Compare和CompareNoCase成员函数实现。

  int Compare(PCXSTR psz) const;

  将该CString对象与psz字符串比较,如果相等则返回0,如果小于psz则返回值小于0,如果大于psz则返回值大于0。

  int CompareNoCase(PCXSTR psz) const throw();

  此函数与Compare功能类似,只是不区分大小写。

  例如:

CString str1 = _T("CString");

  CString str2 = _T("CSTring");

  if (str1 == str2)

  {

  // 因为str1、str2不相等,所以不执行下面的代码

  ...

  }

  if (0 == str1.CompareNoCase(str2))

  {

  // 因为不区分大小写比较时,CompareNoCase函数返回0,所以执行下面的代码

  ...

  }

  五、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("CString");

  CString str2 = str1.Left3); // str2为"CSt"

  str2 = str1.Right2); // str2为"ng"

  str2 = str1.Mid1,3); // str2为"Str"

  str2 = str1.Mid5); // str2为"ng"

  六、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("CSTring");

  int nIndex1 = str.Find(_T("ST")); // nIndex1的值为1

  int nIndex2 = str.FindOneOf(_T("rin")); // nIndex2的值为3

  int nIndex3 = str.ReverseFind(_T('i')); // nIndex3的值为4

 七、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("CSTring");

  int n1 = str.Replace(_T('i'),_T('j')); // str为"CSTrjng",n1为1

  int n2 = str.Delete(1,2); // str为"Cring",n2为5

  int n3 = str.Remove(_T('i')); // str为"CSTrng",n3为1

 八、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

九、判断CString是否全为数字

CString strTarget;  
if ( strTarget == strTarget.SpanIncluding( _T("0123456789") ) )   
{  
    // 字符串由数字构成,符合要求               
}   

跟踪CString::SpanIncluding的代码,底层调用其实就是C函数_tcsspn
对于非MFC工程:

BOOL IsDataValid( LPCTSTR lpStrTarget )  
{  
   int nLen = _tcslen( lpStrTarget );  //获得字符串长度 
   if ( 0 == nLen )  
   {  
       return FALSE;  
   }  

   int nIndex = _tcsspn( lpStrTarget, _T("0123456789") );  
   return ( nLen == nIndex ) ? TRUE : FALSE;  
}  

_tcsspn( lpStrTarget, _T(“0123456789”) );
这个函数返回字符串lpStrTarget中数字的个数(_T(“0123456789”)),使用此函数和一系列字符函数需要包含头文件 tchar.h
我的实现:

#include "stdafx.h"
#include <iostream> 
#include <tchar.h>
int IsDataValid(wchar_t* lpStrTarget)
{
    int nLen = _tcslen(lpStrTarget);  //获得字符串长度 
    if (0 == nLen)
    {
        return 0;
    }

    int nIndex = _tcsspn(lpStrTarget, _T("0123456789"));
    return (nLen == nIndex) ? 2 :1;
}
int _tmain(int argc, _TCHAR* argv[])
{ 
    //wchar_t str[] = L"TEST"; //此时输出1,字符串不全为数字
    wchar_t str[] = L"886";//此时输出2,字符串全为数字 
    wchar_t str[] = L"886hh";//此时输出1,字符串不全为数字
    std::cout << IsDataValid(str) << std::endl;
    return 0;
}

附:字符函数处理相关博客
http://blog.csdn.net/xrzh8989/article/details/44466053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值