zoukankan      html  css  js  c++  java
  • 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实现相关功能,具体后面再详细介绍。 

  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/cmranger/p/4183763.html
Copyright © 2011-2022 走看看