首页 > 代码库 > string与CString对比
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\t"));wcout << "[" << beforeTrim.GetBuffer() << "]" << endl;beforeTrim.Trim();wcout << "[" << beforeTrim.GetBuffer() << "]" << endl;
string没有提供类似的方法,需要自己实现一个:
string trim_str(" abc\t");string blanks("\f\v\r\t\n ");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实现相关功能,具体后面再详细介绍。
string与CString对比
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。