CString、string与char *的比较(转帖)

CString、string与char *的比较(转帖)  

(一)概述

string和CString均是字符串模板类,string是标准模板类(STL)定义的字符串类,已经纳入C++标准之中;

CString 为visual c++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);

char *为c编程中最常用的字符串指针,一般以‘\0’为结束标志;

(二)构造

string是方便的,可以从几乎所有的字符串构造而来,包括CString和char *;
CString次之,可以从一些基本的字符串变量构造而来,包括char*等;
char*没有构造函数,仅仅可以赋值;
eg: 
char * psz = ”momo“;
CString cstr(psz);
string str(cstr);

(三) 运算符重载

a) operator=
string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;
CString次之,可以直接用些羁绊的字符串赋值,包括char*等;
char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如果未赋值,建议先设置为NULL,避免野指针。

eg:char *psz = NULL;
       psz = new char[10];        //也可以直接写为char *psz = new char[10];
       memset(psz, 0, 10);
       strcopy(psz, "joise");

       CString  cstr;
       cstr = psz;
        
       string str;
       str = psz
       str = cstr;
       delete [] psz;
b)   operator+
string与CString差不多,可以直接与char*进行加法,但是不可以互相使用+运算符,即string  str = str + cstr是非法的。必须有一个操作数为
a null-terminated character 。char*, 或者”  ...  “;
char* 没有+运算,只能使用strcat把两个指针连在一起

eg:
char * psz = "joise";
CString cstr  = psz;
cstr = cstr + psz;
string str = psz;
str = str + str + psz;
strcat(psz, psz);
strcat(psz, cstr);         //合法
strcat(psz, str);           //非法,由此可见,CString可以自动转换为const char*,而string不行。
c)operator +=
string几乎可以和所有的字符串变量+=,包括CString和char*;
CString次之,可以与基本的一些字符串变量进行+=,包括char*等;
char*没有+=运算符,只能用strcat把两个指针连在一起
d)   operator [ ]
CString最好,当越界时会抛出断言异常;
string与char*下标越界结果未定义

eg:
 char *psz = ”momo“;
CString cstr = psz;
cout<<cstr[8];
string str = psz;
cout<<str[8];
cout<<psz[8];

e)  operator == 、operator !=、 operator>、operator<、operator>=、operator<=
CString与string之间不可以进行比较,但是均可以与char*进行比较,并且比较的是值,而不是地址

cout<<(psz == cstr);
cout<<(psz == str);
cout<<(str == psz);
cout<<(cstr == psz); //以上均可。

(四)常用算法
a)查找

CString、string与char *的比较(转帖) - 默默 - 默默无闻
注:find_if中是把范围内的值挨个代入匹配函数直至返回true;

b)比较
CString、string与char *的比较(转帖) - 默默 - 默默无闻

c)替换
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
d)插入
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
 e)增加
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
f)截取
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
g)移除
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
h)转换大小写
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
i)与其他类型转换
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
j)格式化
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
k) 得到长度
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
l)  判断为空
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
m)重定义大小 
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
n) 释放资源
CString、string与char *的比较(转帖) - 默默 - 默默无闻
 
(五)安全性
CString >string>char*

(六)灵活性
CString >string>char*

(七)可移植性
char*>string>CString
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值