一、前言
int,float,char,C++標準庫提供的型別:string,vector。
string:可變長字串的處理;vector一種集合或者容器的概念。
二、string型別簡介
C++標準庫中的型別,代表一個可變長的字串
char str[100] = “I Love China”; // C語言用法
三、定義和初始化string物件
#include <iostream> #include <string> using namespace std; int main() { string s1; // 預設初始化,s1=””,””空串,表示裡面沒有字元 string s2 = “I Love China”; // 把I Love China 這個字串內容拷貝到了s2代表的一段記憶體中,拷貝時不包括末尾的 ; string s3(“I Love China”); // 與s2的效果一樣。 string s4 = s2; // 將s2中的內容拷貝到s4所代表的的一段記憶體中。 int num = 6; string s5 = (num,’a’);// 將s5初始化為連續num個字元的’a’,組成的字串,這種方式不太推薦,因為會在系統內部建立臨時物件。 return 0; }
四、string物件上的操作
(1)判斷是否為空empty(),返回的布林值
string s1; if(s1.empty()) // 成立 { cout << “s1字串為空” <<endl; }
(2)size()/length():返回位元組/字元數量,代表該字串的長度。unsigned int
string s1; cout << s1.size() << endl; // 0 cout << s1.length() << endl; // 0 string s2 = “我愛中國”; cout << s2.size() << endl;// 8 cout << s2.length() << endl; // 8 string s3 = “I Love China”; cout << s3.size() << endl;// 12 cout << s3.length() << endl; // 12
(3)s[n]:返回s中的第n個字元,(n是個整型值),n代表的是一個位置,位置從0開始,到size()-1;
如果用下標n超過這個範圍的內容,或者本來是一個空字串,你用s[n]去訪問,都會產生不可預測的作用。
string s3 = “I Love China”; if(s3.size()>4) { cout << s3[4] << endl; s3[4] = ‘2’; } cout << s3 << endl; // I Lowe China
(4)s1+s2:字串的連線,返回連線之後結果,其實就是得到一個新的string物件。
string s4 = “abcd”; string s5 = “efgk” string s6 = s4 + s5; cout << s6 <<endl;
(5)s1 = s2:字串物件賦值,用s2中的內容取代s1中的內容
string s4 = “abcd”; string s5 = “efgk” s5 = s4; cout << s5 <<endl; // abcd
(6)s1 == s2:判斷兩個字串是否相等。大小寫敏感:也就是大小寫字元跟小寫字元是兩個不同的字元。相等:長度相同,字元全相同。
string s4 = “abcd”; string s5 = “abcd” if(s5 == s4) { cout << “s4 == s5” <<endl; // abcd }
(7)s1 != s2:判斷兩個字串是否不相等
string s4 = “abcd”; string s5 = “abcD” if(s5 != s4) { cout << “s4 != s5” <<endl; // abcd }
(8)s.c_str():返回一個字串s中的內容指標,返回一個指向正規C字串的指標常亮,也就是以 儲存。
這個函式的引入是為了與C語言相容,在C語言中沒有string型別,所以我們需要通過string物件的c_str()成員函式將string物件轉換為C語言的字串樣式。
string s4 = “abcd”; const char *p = s4.c_str(); // abcd char str[100]; strcpy_s(str,sizeof(str),p); cout << str << endl; string s11(str); // 用C語言的字串陣列初始化string型別。
(9)讀寫string物件
string s1; cin >> s1; // 從鍵盤輸入 cout << s1 << endl;
(10)字面值和string相加
string str1 = “abc”; string str2 = “def”; string str3 = s1 + “ and ” + s2 + ‘e’; // 隱式型別轉換 cout << str3 << endl; // abc and defe;
// string s1 = “abc” + “def”; // 語法上不允許
(11)範圍for針對string的使用:C++11提供了範圍for:能夠遍歷一個序列的每一個元素。string可以看成一個字元序列。
string s1 = “I Love China”; for(auto c:s1) // auto:變數型別自動推斷 { cout << c << endl; // 每次輸出一個字元,換行 } for(auto &c:s1) // auto:變數型別自動推斷 { // toupper()把小寫字元轉換為大寫,大寫字元不變 c = toupper(c); // 因為c是一個引用,所以這相當於改變s1中的值 } cout << s1 << endl;