char和string 兩者關系很微妙,因為都是字符,但是他們直接的聯系卻不是很多,這里我和大家聊聊字符的兩大勢力的相愛相殺。
char也就是字符型數據定義,string也就是字符串類型數據定義,乍一看他們很想,一個是字符一個是字符串,字符串不就是字符串起來得到的嗎?但是事實上,字符串即是“字符”串起來也不是“字符”串起來,聽起來是不是很奇怪,這里面的兩個字符的意義其實是不一樣的,第一個“字符”的意思是指一個單位的字形、類字形單位或符號的基本信息,而第二個“字符”的意思是字符類型。可能大家聽得還是很糊塗,我幫大家捋一捋,我們現在要先弄清楚一點,char是字符類型,屬於一個類,屬於編程語言中的一個數據類型,而他和字符有區別,字符是什么?字符指的是一個基本信息單位,也就是說字符是一個數據,它可以是數字也可以是字母。
所以,char是一個可以用來存儲字符數據的變量類型,而string就是一個存儲一串字符數據的變量類型,他們的共同點就是他們都是變量類型,都是用來存儲字符的。
我想這樣說大家應該明白了,既然他們倆如此相像,也就免不了他們要常常互動了,不過在講他們的交互之前,我要和大家再提一個概念,不過希望大家能先理清剛剛講的再看,不然會越看越亂的。
下面我要說的就是字符數組,char[],他是一組char類變量組成的,也可以用來存儲一串字符數據,和string的作用很是相像,但是本質是不一樣的,他們應該是數組變量,一個是類變量,char[]很好理解,他就是一個數組,每個單元里面放一個字符數據,string則是一個整體,最后以字符’\0’,作為分隔標識,而且他還有很多類函數可以調用使用。
下面舉個例子:
#include<iostream> #include<string> using namespace std; void main() { string Lyu; Lyu = "I love C++"; cout << "字符串為:" + Lyu << endl; cout << "字符串的長度為:" << Lyu.length() << endl; cout << "是否為空:" << Lyu.empty() << endl << endl; //若返回值為0,則指字符串不為空 Lyu.append("!"); //字符串后追加一個! cout << "追加修改后的字符串為:" << Lyu << endl << endl; string Lyu_2; Lyu_2 = "I love too"; Lyu.swap(Lyu_2); //字符串數據交換 cout << "交換修改后的字符串為:" << Lyu << endl << endl; int site; site = Lyu.find('l', 0); //從0開始尋找出現l的位置並返回位置 cout << "字符串中出現l的位置為:" << site << endl; site = Lyu.find("oo", 0); //從0開始尋找出現oo的位置並返回位置 cout << "字符串中出現oo的位置為:" << site << endl << endl; site = 0; //遍歷搜索所有o的位置 do { site = Lyu.find('o', site); if (site == -1) cout << "搜索完畢,無其他項" << endl; else cout << "字符串中出現o的位置為:" << site << endl; site++; } while (site != 0); getchar(); }
它的執行結果是:
和大家提了幾個常用函數,如
length()函數——查看字符串的長度
empty()函數——檢查字符串是否為空,0表示不為空
append("字符串")——在字符串后添加新字符
find('字符', 0)——從0位查看第一個出現的該字符的位置
……
具體理論區別大家有興趣可以去自行研究,我就不做太深入的介紹了,下面就到正題,這兩者的相互轉化。
string類怎么轉換成一個char數組
下面是代碼
#include<iostream> #include<string> using namespace std; void main() { string LyuS = "Welcome to learn C++"; const char *LyuC = LyuS.data(); //字符串轉換為字符數組 cout << "LyuC :"<< LyuC << endl; for(int i = 0 ; i < LyuS.length() ; i ++) cout << "LyuC[" << i << "] :" << LyuC[i] << endl; char LyuC_2[10]; LyuC_2[0] = 'a'; //給字符數組進行賦值 for (int j = 1; j < 9; j++) { LyuC_2[j] = LyuC_2[j - 1] +1; } LyuC_2[9] = '\0'; string LyuS_2 = LyuC_2; //字符數組轉化成字符串 cout << "LyuS_2 :" << LyuS_2; getchar(); }
它的執行結果是:
const char *LyuC = LyuS.data();
這句話就是字符串轉字符數組,我在不少資料里面發現他們把字符數組和字符指針分開了,其實在C++里面數組在某種意義上就是連續不斷的指針,當然只限於在用法上,所以對於初學者如果不是要求完成度特別高,可以這么用.
string LyuS_2 = LyuC_2;
字符數組轉成字符串就很是容易了,直接賦值即可。
好了,今天的分享到此為止,希望大家能對這兩種字符存儲類型有所了解。
https://blog.csdn.net/yu1543376365/article/details/79176606
它的執行結果是: