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

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