本文包含以下幾種轉換:
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