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对比的更多相关文章
- C++ 中int,char,string,CString类型转换
1. c++中string到int的转换 1) 在C标准库里面,使用atoi: #include <cstdlib> #include <string> std::stri ...
- 头文件 string.h cstring string 区别
1.#include <cstring> //不可以定义string s:可以用到strcpy等函数using namespace std; #include <stri ...
- C++ 中 int,char*,string,CString之间相互转换-整理
<多字符集下> #include <string> //使用C++标准库的string类时, 定义时 std::string str; using namespace std; ...
- MFC中char*,string和CString之间的转换
MFC中char*,string和CString之间的转换 一. 将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如: CString theString( &q ...
- Cpp读文件、CString转String、String转CString
场景 C++读取文件 技术点 读取文件 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 ...
- char*、string、CString各种字符串之间转换
参考博客: http://blog.csdn.net/luoweifu/article/details/20242307 http://blog.csdn.net/luoweifu/article/d ...
- string string.h cstring 区别
c++中 string与string.h 的作用和区别 #include <string.h> void main() { string aaa= "a ...
- A2T和T2A,===string和CString互转 方法一:--用宏的方式
USES_CONVERSION它是在堆栈上分配空间的,也就是说你在你在函数未结束就不会被释放掉.所有要注意不要在一个函数中用while循环执行它,不然栈空间就马上会分配完(栈空间一般只有2M,很小). ...
- std::string 和 CString问题
std::string stdTemp; CString strTemp; strTemp = stdTemp; ;//这一步直接赋值可不可以 因为CString可以接受const char*的 ...
随机推荐
- TF Boys (TensorFlow Boys ) 养成记(三): TensorFlow 变量共享
上次说到了 TensorFlow 从文件读取数据,这次我们来谈一谈变量共享的问题. 为什么要共享变量?我举个简单的例子:例如,当我们研究生成对抗网络GAN的时候,判别器的任务是,如果接收到的是生成器生 ...
- ubuntu vnc安装
VNC(Virtual Network Computing),为一种使用RFB协议的屏幕画面分享及远程操作软件.此软件借由网络,可发送键盘与鼠标的动作及即时的屏幕画面. 1. 安装vnc服务器 sud ...
- 【BZOJ】1653: [Usaco2006 Feb]Backward Digit Sums(暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=1653 看了题解才会的..T_T 我们直接枚举每一种情况(这里用next_permutation,全排 ...
- 将execel表格的数据导入到mysql数据库
在开发中经常会将现成的execel表格导入到数据库里,否则一个个字段插入填写,太浪费时间,效率很低.本文主要是讲如果将execel表格导入到mysql数据库,希望对各位有所帮助.使用软件:sql工具: ...
- 复习及总结--.Net线程篇(4)
这里要说的就是多线程的锁的问题了 锁:作用在于实现线程间的同步问题,最典型的是售票问题 1,InterLocked 提供的都是静态方法,用来同步对多个共享变量的访问,包括以原子方式递增,递减,比较和替 ...
- Oracle自定义聚集函数
今天工作中看见别人写的自定义聚集函数,所以一门心思的想搞懂,就在网上找资料了. 自定义聚集函数 自定义聚集函数接口简介 Oracle提供了很多预定义好的聚集函数,比如Max(), Sum(), AVG ...
- 《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
原创文章,欢迎转载.转载请注明:关东升的博客 MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中.现在,很多计算 ...
- 电力项目十三--js添加浮动框
修改page/menu/loading.jsp页面 首先,页面中引入浮动窗样式css <!-- 浮动窗口样式css begin --> <style type="text/ ...
- 160401、关于cronExpression的介绍
关于cronExpression的介绍: 每一个字段都有一套可以指定有效值,如 Seconds (秒):可以用数字0-59 表示, Minutes(分) :可以用数字0-59 表 ...
- 苹果MAC安装Windows系统
一,选择实用工具 二,选择分区助理 三,创建安装U盘或者安装 如没有安装U盘需要现创建一个,安装镜像需要事先准备好,制作好了安装U盘就选择第三项安装 四,为windows分区(建议分30G) 系统会格 ...