c++如何將一個char轉化為string
c++將一個char轉化為string
const char c = 'a'; //1.使用 string 的構造函數 string s(1,c); //2.聲明string 后將char push_back string s1; s1.push_back(c); //3.使用stringstream stringstream ss; ss << c; string str2 = ss.str(); //注意 使用to_string 方法會轉化為char對應的ascii碼 //原因是 to_string 沒有接受char型參數的函數原型,有一個參數類型 //為int 的函數原型,所以傳入char型字符 實際是先將char 轉化 //為int 型的ascii 碼,然后再轉變?yōu)閟tring //以下輸出結果為 97 cout << to_string(c) << endl;
關于C++char和string類型理解
遇到幾個字符串類型的題目發(fā)現自己對概念模糊不清。
C++中char是字符類型,是一種基本數據類型,而string是一個模板類,實例化的是對象,它的內部是封裝了const char*類型。
在VS2019環(huán)境下,如果char ch="abc";編譯器會報錯,錯誤提示為:const char*類型的值不能用于初始化char類型的實體。
同理,char *ch="abc";也是類似如此。
雙引號應該是聲明字符串,編譯器默認將雙引號中的內容當做一個string類型。
然而char ch=‘abc’;是合法的,是因為單引號將整個abc視為一個字符嗎?當然不是。
經過測試:
char ch='abc'; cout<<ch; //打印c
只打印一個c,很奇怪。
然而在gcc下會發(fā)出警告:
我也不是太懂,大佬給我找來了如下圖:
為什么只打印一個c?
abc是一個字符串,賦值給一個字符時,會取字符串中最低的位數賦值。
關于char*和string
前面提到,string內部封裝了const char*,是一個常量指針,指向可以改變,但是指向的值不能改變。
char*是一個字符型指針,可以指向一個字符數組,與string不太相同的是,字符數組存儲的字符串必須以'\0'結尾,代表結束符號,而string并不一定以'\0'結束。
string的內存管理是由系統(tǒng)處理的,除非內存池用完,否則基本上不會出現什么內存問題。
而char*的內存需要自己手動管理了,很容易出現內存問題。
所以當你需要存一個串,但是不知道其多大時,用string更為合適。
char*和string的互相轉化
如果要將string直接轉換為const char*類型,可以使用兩個函數。
1.c_str()
string s="abcd"; const char*ch=s.c_str(); //通過VS2019,可以看到該函數的聲明為:const char*std::string::c_str()const noexcept;
c_str()函數返回一個指向正規(guī)C字符串的指針,內容與string相同,因為C本身沒有string類
但是,上面這種用法很不安全,因為ch最后指向的內容是垃圾值,s對象被析構了。而且c_str()返回的是一個臨時指針,不能對其進行操作。
通過strcpy函數來進行轉換是安全的:
char ch[20]; string s="abcd"; strcpy(ch,s.c_str());
2.data()
string s="abcd"; const char*ch=s.data();
那c_str()和data()有什么區(qū)別呢?
c_str()會在數據的末尾添加'\0'結束符,多數用于使用字符串場合。
而data()函數不會添加'\0'結束符。
如果要轉換為char*而非const char*類型
string s="abcd"; char *ch; ch=(char*)malloc((s.length())*sizeof(char)); s.copy(ch,s.length(),0);//把當前串中以0開始的s.length()個字符拷貝到以ch為起始位置的字符數組中,返回實際拷貝的數目 cout<<ch;
通過str[i]的方式取值的類型
string s = "abcd"; cout << typeid(s[1]).name() << endl;//char
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。