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对比的更多相关文章

  1. C++ 中int,char,string,CString类型转换

      1. c++中string到int的转换 1) 在C标准库里面,使用atoi: #include <cstdlib> #include <string> std::stri ...

  2. 头文件 string.h cstring string 区别

    1.#include <cstring>   //不可以定义string s:可以用到strcpy等函数using   namespace   std; #include <stri ...

  3. C++ 中 int,char*,string,CString之间相互转换-整理

    <多字符集下> #include <string> //使用C++标准库的string类时, 定义时 std::string str; using namespace std; ...

  4. MFC中char*,string和CString之间的转换

    MFC中char*,string和CString之间的转换 一.    将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如:  CString theString( &q ...

  5. Cpp读文件、CString转String、String转CString

    场景 C++读取文件 技术点 读取文件 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 ...

  6. char*、string、CString各种字符串之间转换

    参考博客: http://blog.csdn.net/luoweifu/article/details/20242307 http://blog.csdn.net/luoweifu/article/d ...

  7. string string.h cstring 区别

    c++中 string与string.h 的作用和区别 #include  <string.h>  void  main()  {        string  aaa=  "a ...

  8. A2T和T2A,===string和CString互转 方法一:--用宏的方式

    USES_CONVERSION它是在堆栈上分配空间的,也就是说你在你在函数未结束就不会被释放掉.所有要注意不要在一个函数中用while循环执行它,不然栈空间就马上会分配完(栈空间一般只有2M,很小). ...

  9. std::string 和 CString问题

    std::string stdTemp; CString strTemp; strTemp = stdTemp;    ;//这一步直接赋值可不可以 因为CString可以接受const char*的 ...

随机推荐

  1. php 返回上一页并刷新

    echo "<script>alert('分组已存在!');location.href='".$_SERVER["HTTP_REFERER"].&q ...

  2. 曲线学习PyQt5方案一

    PyQt5官方网站没直接给出API,这个很操蛋啊. PtQt4官方网站有完整的API,C++版本的Qt5也能找到完整的API资料.由于Qt5的C++和Python3的类和函数实现应该是一致的,所以可以 ...

  3. (转)c指针问题

    字符串常量问题: http://blog.csdn.net/zhongyili_sohu/article/details/8084188 1. 常量字符串 在代码里直接出现的”abcdef”这种字符串 ...

  4. [转]Loadrunner Error code 10053 & Tomcat 连接器(connector)优化

    LoadRunner提示错误:Error : socket0 - Software caused connection abort. Error code : 10053. 在今天的测试过程中发现,s ...

  5. 查看linux系统外网ip命令

    终端中输入 curl ipinfo.io 或者 curl ifconfig.me 即可通过IP地址检测网站提供的api获得取本机的外网IP,或者以 JSON 格式返回全部结果.

  6. node 下好用的工具

    1. supervisor Node Supervisor is used to restart programs when they crash. Node Supervisor 是用来当程序崩溃时 ...

  7. AVR 定时器快速PWM模式使用

    PWM很常用,AVR自带内部PWM功能,分为快速PWM模式和相位修正PWM模式.   我们这里选择方式15 ,由OCR1A保存上限值,由OCR1B保存匹配值,所以输出管脚 OCR1A不能输PWM,只能 ...

  8. c++多线程例(互斥体,共同访问)

    <pre name="code" class="cpp">//这是2个线程模拟卖火车票的小程序 #include <windows.h> ...

  9. java基础---->Java中异常的使用(二)

    这一篇博客用例子讲述一下异常的处理过程.那些 我们一直惴惴不安 又充满好奇的未来 会在心里隐隐约约地觉得它们是明亮的. 异常的执行过程 一.实例一:return语句 public class Exce ...

  10. 170405、java版MD5工具类

    package com.rick.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...