CString,string,char*的综合比较(转)
(四) 常用算法
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 CompareNoCase |
注:返回值如果<0则前面的值小于后面的值,反之亦然
c) 替换
|
作用 |
char* |
string |
CString |
|
查找指定值 |
_strset _strnset |
replace replace_copy replace_copy_if replace_if |
Replace |
d) 插入
|
作用 |
char* |
string |
CString |
|
查找指定值 |
insert |
Insert |
e) 增加
|
作用 |
char* |
string |
CString |
|
动态增加值 |
strcat |
push append |
Append AppendChar AppendFormat |
f) 截取
|
作用 |
char* |
string |
CString |
|
得到部分值 |
用下标操作 |
substr |
Left Mid Right Truncate |
g) 移除
|
作用 |
char* |
string |
CString |
|
移除部份值 |
remove |
Remove |
|
|
移除空白值 |
RemoveBlanks 注:此为ATL提供,非C函数 |
remove_if |
Trim TrimLeft TrimRigth |
h) 转换大小写
|
作用 |
char* |
string |
CString |
|
转换大小写 |
_strlwr _strupr |
MakeLower MakeUpper |
i) 与其他类型转换
|
作用 |
char* |
string |
CString |
|
转化为数字 |
atoi atod atof |
Format |
|
|
转化为char* |
c_str |
GetBuffer GetBufferSetLength |
j) 格式化
|
作用 |
char* |
string |
CString |
|
格式化 |
sprintf |
Format |
|
作用 |
char* |
string |
CString |
|
得到长度 |
strlen |
length |
GetLength |
|
得到大小 |
size |
GetAllocLength |
l) 判断为空
|
作用 |
char* |
string |
CString |
|
判断是否为空 |
判断是否==NULL或者第一个字符是否是’\ |
empty |
IsEmpty |
m) 重定义大小
|
作用 |
char* |
string |
CString |
|
重定义大小 |
realloc new |
resize |
GetBufferSetLength |
n) 释放资源
|
作用 |
char* |
string |
CString |
|
释放 |
free delete (delete[]) |
ReleaseBuffer ReleaseBufferSetLength |
(五) 安全性
CString > string > char*;
(六) 灵活性
CString > string >char*;
(七) 可移植性
char* = string > CString
八) MFC中常用字符串结构图(此非比较,但为了方便查阅就一并算在这儿了)
(九) 总结
综上所述,我个人认为,在MFC、ATL中使用字符串尽量使用CString,毕竟都是微软的孩子,各方面都比其它更有优势,而在非微软平台上或对移植性要求较高的场合推荐使用string,标准模板库提供了那么强大的泛型算法,没必要再自己去造车轮。
(十) 参考文献
主要参考的是MSDN,就不一一列出了。
最后,限于本人水平,以上所述未必正确,敬请斧正。谢谢阅读。
Joise.LI
浙公网安备 33010602011771号