• string与CString对比


    string是标准C++库中的字符串类,CString是在Windows开发环境下常用的字符串类,CString目前已从MFC中分离出来可以单独使用,只需包含atlstr.h即可。

    相比string,CString提供较多的方便使用的方法,如大小写转换、不区分大小比较字符串等方法。而string并没有直接提供这些方法,但可以通过结合STL提供的算法轻松实现这些操作。下面对CString和string的一些常用方法做一下对比:

    (1)大小写转换

    CString tmp(_T("A CString: Rangers!"));
    //大小写转换
    //小写
    tmp.MakeLower();
    //大写
    tmp.MakeUpper();
    
    //大小写转换
    string str("Rangers Lead the way!");
    transform(str.begin(),str.end(),str.begin(),tolower);//小写    
    transform(str.begin(),str.end(),str.begin(),toupper);//大写
    

    (2)反转字符串

    //字符串反转
    CString tmp2(_T("The C++ Standard Library"));
    tmp2.MakeReverse();
    
    //字符串反转
    string str("The C++ Standard Library");
    reverse(str.begin(),str.end());
    

    (3)字符串比较

    CSring:

    CString str1(_T("This is A CString"));
    CString str2(_T("THIS IS A CSTRING"));
    wcout << "str1: " << str1.GetBuffer() << endl;
    wcout << "str2: " << str2.GetBuffer() << endl;
    //区分大小写
    wcout << "CString::Compare(): " << (str1.Compare(str2) == 0 ? "equal" : "unequal") << endl;
    //不区分大小写
    wcout << "CString::CompareNoCase(): " << (str1.CompareNoCase(str2) == 0 ? "equal" : "unequal") << endl;
    

    string区分大小写比较字符串使用compare方法

    //字符串比较
    string comp_str1("This is a string");
    string comp_str2("THIS IS a String");
    cout << comp_str1 << endl;
    cout << comp_str2 << endl;
    cout << "string::compare: " << (comp_str1.compare(comp_str2) == 0 ? "equal" : "unequal") <<endl;
    

    实现不区分大小稍微复杂一些,需要自己实现一个不区分大写比较字符的方法,然后使用equal算法来实现比较。

    bool nocase_compare(char c1,char c2)
    {
      return tolower(c1) == tolower(c2);
    }
    
    bool ret_comp = comp_str1.size() == comp_str2.size()&& equal(comp_str1.begin(),comp_str1.end(),comp_str2.begin(),nocase_compare);
    

    注:equal的调用必须保证第二区间至少要和第一区间具有一样多的元素,所以首先比较两个字符串的大小是必要的,否则可能导致未定义的行为。

    (4)去掉字符串前后的空白字符

    CString的方法相当简单:

    //去掉字符串前后的空白字符
    CString beforeTrim(_T("   abcbc	"));
    wcout << "[" << beforeTrim.GetBuffer() << "]" << endl;
    beforeTrim.Trim();
    wcout << "[" << beforeTrim.GetBuffer() << "]" << endl;
    

    string没有提供类似的方法,需要自己实现一个:

    string trim_str(" abc	");
    string blanks("fv
    	
     ");
    trim_str.erase(0,trim_str.find_first_not_of(blanks));
    trim_str.erase(trim_str.find_last_not_of(blanks)+1);
    

    (5)取子串

    CString 提供了Left() Right() Mid()等方法

    string则提供了substr()方法

    (6)格式化字符串

    CString使用Format函数轻松实现

    CString FormatStr;
    FormatStr.Format(_T("TEST:%.6f"),1.008979);
    

    在string中没有类似的方法,但可以借助String Stream Classes实现相关功能,具体后面再详细介绍。 

  • 相关阅读:
    点击cell后 cell的背景不变,cell上的字体颜色发生改变的功能实现
    各种属性设置
    多列表 ,菜单
    正则表达式
    多个storyboard之间的跳转问题
    关于uicollectionview的个人学习
    uiscrollview的自动布局
    手动自动布局
    关于简单的跳转问题
    深入理解@class和#import的区别
  • 原文地址:https://www.cnblogs.com/cmranger/p/4183763.html
Copyright © 2020-2023  润新知