string char* char[] char之间的转换

本文包含以下几种转换:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章