1. 程式人生 > >C++中的標準庫型別——string

C++中的標準庫型別——string

string 

標準庫型別string是一種可變長的字元序列。string定義在std名稱空間中。在使用string前,需要:

 #include<string> 
 using std::string;

一、宣告與定義

string name;

二、初始化

string s1;   // 預設初始化,空序列
string s2(s1); 
string s3 = s1;
string s4 ("aaa"); // 字面值初始化最後存在的一個空字元會被丟棄
string s5 = "aaa";
string s6 (4 , 'a');  //由4個a組成字元序列進行初始化
string s( cp, n); //s是cp指向的陣列中前n個字元的拷貝,此陣列至少包含n個字元
string s(s2 , pos2); // s是string s2從下標pos2開始的字元的拷貝,若是pos2>s2.size(),則此行為為定義。
string s(s2 , pos2 , len2);//s是從s2下標pos2開始的len2個字元的拷貝。

三、方法

1、字元序列的讀寫
os << s;  //將s寫到輸入流當中,返回os,這樣意味著可以多個s可以連續輸出,即: os << s1 << s2;
is >> s;  //將s讀到字元序列當中,字元序列之間以空白作為分隔,返回is。這樣意味著可以多個s可以連續輸入,即: is >> s1 >> s2; 
getline( is , s); //讀取一行,保留空白,直到遇到換行符,注意換行符也是一個空白,會被保留
在執行讀取的操作中,string物件會自動的忽略開頭的空白(空格符、換行符、製表符等)並從第一個非空白的字元讀取,直到遇到下一個空白。
2、empty和size操作
s.empty();//根據string物件是否為空返回一個bool型別的值
s.size();//返回string物件的長度,即其中字元的個數
關於 string::size_type 型別: size 函式返回的是這種型別,並不是一般的 int 或者 unsigned 型別。它是一個無符號型別的值而且足夠放下任何 string 物件的大小。對於表示式中存在無符號數需要警惕! 可以使用關鍵字 auto 或者 decltype 來推斷資料的型別。 3、大小比較
//利用字元在字典中的順序進行比較,並且對大小寫敏感
s1 == s2;  
s1 != s2; 
s1 <= s2; 
s1 < s2; 
s1 >= s2; 
s1 >  s2; 
s.compare(args);//具有多種引數形式
關於字元序列的大小比較:
a)如果兩個 string 物件的長度不同,而且較短的 string 物件的每個字元都與較長的 string 物件對應位置上的字元相同,就認為較短 string 物件小於較長 string 物件。即:如果一個是另一個的子集(該說法可能不準確),則認為是一個小於另一個。
b)如果兩個 string 物件在某些位置上不一樣,則 string 物件的比較結果其實就是 string 物件中的第一個不同字元的比較結果。

4、字元序列查詢
//arg的形式([c , pos]、[s2 , pos]、[cp , pos]、[cp , pos , n])
s[n];//字元序列中第n個字
s.find(args);//查詢s中args第一次出現的位置
s.rfind(args);//查詢s中args最後一次出現的位置
s.find_first_of(args);//在s中查詢args中任何一個字元第一次出現的位置
s.find_last_of(args);//在s中查詢args中任一字元最後一次出現的位置
s.find_first_not_of(args);//在s中查詢第一個不在args中的字元
s.find_last_not_of(args);//在s中查詢最後一個不再args中的字元

5、修改
//args的形式:[str],[str,pos,len],[cp,len],[cp],[n,c],[b,e],[初始化列表] 
s1 = s2;//賦值
s1 + s2;//兩個字元序列可以直接相加
s.insert(pos , args);//在pos之前插入args指定的字元
s.erase(pos , len);//刪除從pos開始的len個字元
s.assign(args);//將s中的字元替換為args指定的字元
s.append(args);//在s的末尾追加args
s.replace(range , args);//刪除s中範圍range內的字元,替換為args指定的字元
修改操作中的操作很多函式是可以過載的。函式的返回方式依賴於輸入引數的設定,並不是所有的函式可以使用所有的引數方式。

6、字元處理
//定義在標頭檔案cctype中
isalnum(c);//當c是字母或者數字時返回真
isalpha(c);//當c是字母時返回真
isdigit(c);//當c為數字時返回真
isxdigit(c);//當c為十六進位制時為真
iscntrl(c);//當c是控制字元時返回真
isgraph(c);//當c不是空格但可以列印時返回真
isprint(c);//當c是可以列印字元時返回真(即c是空格或者有可視形式)
islower(c);//當c是小寫字母時返回真
isupper(c);//當c是大寫字母時返回真
ispunct(c);//當c是標點符號時返回真
isspace(c);//當c是空白時返回真
tolower(c);//輸出c的小寫字母形式
toupper(c);//輸出c的大寫字母形式