本文包含以下几种转换:
string-》char* 使用string类方法
string-》char[]使用循环赋值,最后加结尾’\0’
char* char[]-》string 直接赋值
单个字符-》string 详见最后一个例子
一、string转为char char[]*
string转为char 需要自己在数据末尾加’\0’
主要通过string类内部的几个方法来返回数据:data(),c_str(),copy
1、data()方法返回 const char 格式的字符串数据
比如
string str = "world";
const char *p = str.data();//要加const或者等号右边用char*
char *q = (char*)str.data();//同上,要加const或者等号右边用char*
cout << p << endl << q << endl;
q[5] = '!'; q[6] = '\0';//手动加结尾
cout << q << endl;
根据上面运行结果,可知,通过char转换,可以继续进行后续修改。
2、c_str()方法返回 const char 格式的字符串数据
代码就不贴了,将data()换为c_str()即可,运行结果是一样的
3、copy方法
str.copy(char* dest,int length,int start);
第一个参数是目的数组,第二个是数据长度,第三个是数据起始位置。
string str = "world123";
char p[6];//此处不能使用char* p;或者char* p=" ";或者char* p="";
str.copy(p, 5, 0);
*(p + 5) = '\0';
cout << p << endl;
以上代码在部分IDE上可能报错C4996,可以通过修改项目属性-C+±预处理器-预处理器定义无视warning,在预处理器定义加上_SCL_SECURE_NO_WARNINGS即可。(想试试copy方法的同学建议试完后改回来)
注意!本方法需要手动加’\0’,并且不能copy到char*;
二、char、char[]转为string*
直接赋值
string s1,s2;
char *p = "hello";//直接赋值
char q[6]="world";
s1 = p;
s2 = q;
cout << s1 <<endl << s2 << endl ;
三、string转为char[]
通过string类的length()方法,for循环赋值即可
四、char转为string
//1、构造函数里有个string(size_t,char)
char x = 'a';
string s(1,x); //1表示构造函数需要的x的个数
//2、string初始化没char,但是push_back可以
string s;
char x = 'a';
s.push_back(x);
值得注意的是!string可以直接+ char,也可以直接= char来初始化string,但如果发生以下情况:
int main() {
string s;
char x = 'bdsc';//意外的可以运行?
s+=x;
cout << s;
}
结果是 发生从“int”到“char”截断
而如果将其中一行代码替换:
char x = 'bdsca';
会报错:
看来在该环境下,char最多可以容纳4个字符,结合上一个例程提示的 从int”到“char”截断 ,可以推断,char在进行初始化时,接受一个int型(4字节)的数据,并取最后一个字节的数据作为字符。
C++中string char* int 之间的转换方法:
https://blog.csdn.net/jojozym/article/details/104791775