string 与char* 和char[]区别 以及相互转换

 

一、三者的基本概念

 

string

 

string可以被看成是以字符为元素的一种容器,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),可使用迭代器。

 

与char*不同的是,string不一定以NULL(‘\0’)结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。

 

char*:

 

char *是一个指针,指向一个字符串数组。

声明:char *cstr = new char[10];

 

char* 的值(指向)是可以改变的,但char*只能指向(字符串)常量,指向的区域的内容不可改变;

 

char[]

 

是一个字符数组,数组内的内容是可以改变的。作为函数的声明的参数的时候,char []是被当做char *来处理的!两种形参声明写法完全等效!

 

举例:

char *test=” hello world!”的内容是不可以改的;char test[15]=” hello world!”的内容是可以改的。

 

二、相互转换

1、string转char*

std::string str = "string";
const char *cstr = str.c_str();

这时,得到的是一个const char*,他是一个常量,如果需要得到char*,需要以下的操作:

std::string str = "string";
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
// do stuff
delete [] cstr;
 

2、char*转string

可以直接赋值。

char *cstr = “hello”;

string sss;

sss = cstr;

不过这种方式会出现情况。

当我们定义了一个string类型之后,用printf(“%s”,s1);输出是会出问题的。这是因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。

用cout输出是没有问题的,若一定要printf输出。那么可以这样:

printf(“%s”,sss.c_str());

 

3、 char[] 转 string

同上。

 

4、string 转 char[]

string sss = "hello";

char ppp[6];
int i;

for( i=0;i<sss.length();i++)
ppp[i] = sss[i];

ppp[i] = '\0';
cout<<ppp;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值