ATL char * 、string 、CString
来源:互联网 发布:网易imap服务器和端口 编辑:程序博客网 时间:2024/06/05 16:42
STring与CSTring的区别和联系
2009-12-02 11:46:44| 分类:C++辨析| 标签:|字号大中小 订阅
CString:MFC里面封装的类。
主要应用在MFC和ATL程中
主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
动态的TCHAR数组。它是一个完全独立的类,封装了+等操作符和字符串操作方法。
String:标准模板类(STL)定义的字符串类
string.h是C语言中字符串操作函数的头文件
cstring.h是c++对C语言中的strcpy之类的函数申明,包含cstring.h之后,就可以在程序中使用C语言风格的strcpy之类的函数。
转换:
CString→String
CString strMfc=_T("test");
std::string strStl ;
strStl=strMfc.GetString();
String→CString
CString strMfc;
std::string strStl="test";
strMfc=strStl.c_str();
构造
string可以从几乎所有的字符串构造而来,包括CString和char*;
CString次之,可以从基本的一些字符串变量构造而来,包括char*等;
char*没有构造函数,仅可以赋值;
eg:
char* pName = “jane”;
CString cstr( pName );
string str( cstr );
赋值
1、=
string 几乎可以直接用所有的字符串赋值,包括CString和char*;
CString 次之,可以直接用些基本的字符串赋值,包括char*等;
char* 只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针;
eg:
char *pName = NULL;
psz = new char[8]; //char *pName = new char[8];
memset( pName, 0, 8 );
strcpy( pName, "jane");
CString cstr;
cstr = pName;
string str;
str = pName;
str = cstr;
delete []pName;
2、+
string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str + cstr是非法的,须转换成char*;
char*没有+运算,只能使用strcat把两个指针连在一起;
eg:
char* pName = "jane";
CString cstr = pName;
cstr = cstr + pName;
string str = pName;
str = str + pName;
strcat( pName, pName);
strcat( pName, cstr ); // 合法
strcat( pName, str ); // 非法,由此可见,CString可自动转换为const char*,而string不行
3、+=
string 几乎可以与所有的字符串变量+=,包括CString和char*;
CString 次之,可以与基本的一些字符串变量进行+=而来,包括char*等;
char*没有+=运算符,只能使用strcat把两个指针连在一起;
4、[]
CString最好,当越界时会抛出断言异常;
string与char*下标越界结果未定义;
eg:
char* pName = "jane";
CString cstr = pName;
cout << cstr[8];
string str = psz;
cout << str[8];
cout << psz[8];
5、== 、!=、> 、< 、>= 、<=
CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不是地址;
cout << ( pName == cstr );
cout << ( pName == str );
cout << ( str == pName);
cout << ( cstr == pName );//以上代码返回均为1
常用算法
a) 查找
作用
char*
string
CString
查找指定值
strchr
strstr
strrstr
strspn
find
Find
第一个匹配的值
fild_first_of
FindOneOf
从后面开始查找
ReserveFind
指定匹配方式
find_if
注:find_if中是把范围内的值挨个代入匹配函数直至返回true
b) 比较
作用
char*
string
CString
查找指定值(区分大小写)
strcmp
strncmp
strcoll
_strncoll
operator<
operator>
operator<=
operator>=
operator==
operator!=
Collate
Compare
查找指定值(不区分大小写)
_stricmp
_strnicmp
_stricoll
_strnicoll
CollateNoCase
CompareNoCas
注:返回值如果<0则前面的值小于后面的值,反之亦然
c) 替换
作用
char*
string
CString
查找指定值
_strset
_strnset
replace
replace_copy
replace_copy_if
replace_if
Replace
d) 插入
作用
char*
string
CString
查找指定值
insert
Insert
e) 增加
作用char*stringCString动态增加值strcatpushappend
AppendAppendChar
AppendFormat
f) 截取
作用char*stringCString得到部分值用下标操作substrLeftMid
Right
Truncate
g) 移除
作用char*stringCString移除部份值 removeRemove移除空白值RemoveBlanks注:此为ATL提供,非C函数
remove_ifTrimTrimLeft
TrimRig
h) 转换大小写
作用char*stringCString转换大小写_strlwr_strupr
MakeLowerMakeUpper
i) 与其他类型转换
作用char*stringCString转化为数字atoiatod
atof
Format转化为char* c_strGetBuffer
GetBufferSetLen
j) 格式化
作用char*stringCString格式化sprintf Formatk) 得到长度
作用char*stringCString得到长度strlenlengthGetLength得到大小 sizeGetAllocLength
l) 判断为空
作用char*stringCString判断是否为空判断是否==NULL或者第一个字符是否是’\0’emptyIsEmptym) 重定义大小
作用char*stringCString重定义大小reallocnew
resizeGetBufferSetLengthn) 释放资源
作用char*stringCString释放freedelete (delete[])
ReleaseBufferReleaseBufferSetLength
安全性
CString > string > char*;
灵活性
CString > string >char*;
可移植性
char* = string > CString
来源: http://sekaii.blog.163.com/blog/static/537314082009112114644396/
- ATL char * 、string 、CString
- ATL and MFC String Conversion Macros(Cstring转char*)
- char*,char[],string,cstring
- char*,char[],string,cstring
- char*,char[],string,cstring
- char*,char[],string,cstring 转换
- char*,char[],string,cstring 转换
- CString,string,char*
- CString string char* 转化
- char* string CString 区别
- char string cstring区别
- Cstring,char*,string 转换
- CString转char * ,string
- string char* CString
- CString转char * ,string
- char *, CString, string转换
- string,CString,char
- CString,Char*,string
- 推荐一个跨平台内存分配器tcmalloc用在3D游戏上
- IE7以下浏览器的hasLayout属性,大部分的IE css bug都出于此
- vector顺序容器初始化
- 苹果推送通知服务教程 Apple Push Notification Services Tutorial
- spring框架的12个开源项目
- ATL char * 、string 、CString
- GridView采用DataSet数据集填充数据绑定示例
- 使用SecureCRT上传和下载文件
- linux socket断开网络连接程序终止
- 嵌入式 Linux 与linux启动时自动加载模块
- MFC内存泄露检测
- Enum的使用
- 写文件 faster and faster
- java的反射机制(简单解释)