close

按此前往C++完整教學目錄

 

 

子字串(substring)的操作:

因字串(string)是在std命名空間中,故要在C++中使用,需先在開頭寫下:

using namespace std;

using std::string;

(1) 利用成員函式substr()呼叫子字串,如:

string a="123456789";

cout<<a.substr(2,5)<<endl;  //表示呼叫字串a索引2數起的5個字元所構成的子字串,顯示34567

cout<<a.substr(2)<<endl;  //表示呼叫字串a索引2數起之後的所有字元所構成的子字串,顯示3456789

註:substr()並沒有回傳字串的參考,所以只能取不能存。

(2) 利用成員函式find()搜尋子字串:

字串名稱.find(‘某字元’ [,n]); //從字串的索引n開始尋找某字元,若找到,則回傳最先找到的某字元的索引。

字串名稱.find(“子字串” [,n]); //從字串的索引n開始尋找子字串,若找到,則回傳最先找到的該子字串的索引。

字串名稱一.find(“字串名稱二” [,n]); //從字串的索引n開始尋找與字串二相同型式的子字串,若找到,則回傳最先找到的該子字串的索引。

註一:若第二個參數n不輸入,則n會預設為0

註二:若找不到欲搜尋的字元或字串,則回傳作業系統能代表的最大正整數,通常為232-1=4294967295(32位元的作業系統而言),這個值在C++中已有名稱,可用string::npos來呼叫。

註三:尚有一些成員函式,其使用方法與find()相同,若沒找到亦會傳回232-1

rfind():由字串末往前搜尋。

find_first_of():回傳所有符合比對的子字串中,最前面的索引值。

find_last_of():回傳所有符合比對的子字串中,最後面的索引值。

find_first_not_of():回傳所有不符合比對的子字串中,最前面的索引值。

find_last_not_of():回傳所有不符合比對的子字串中,最後面的索引值。

程式碼如:

string a = "1122331122556";

string b="22";

cout<<a.find("22")<<endl;    //顯示2

cout<<a.find(b,5)<<endl;    //顯示8

cout<<a.find("7",0)<<endl;   //顯示4294967295

cout<<a.rfind("22")<<endl;   //顯示8

cout<<a.find_first_of("22")<<endl;  //顯示2

cout<<a.find_last_of("22")<<endl;  //顯示9

cout<<a.find_first_not_of("11")<<endl;  //顯示2

cout<<a.find_last_not_of("11")<<endl;  //顯示12

(3) 取代子字串

字串一名稱.replace(n1 , k , 字串二名稱);:將從字串一的索引n1數起的k個字元,用字串二取代。

字串一名稱.replace(n1 , k1 , 字串二名稱 , n2 , k2);:將從字串一的索引n1數起的k1個字元,用從字串二的索引n2數起的k2個字元取代。

亦可結合find()函式取代特定字串,如:

string a ="123456789";

a.replace(a.find("345"),3,"000");

cout<<a<<endl;  //顯示120006789

(4) 刪除子字串

字串名稱.erase();:刪除字串所有字元使其為空字串。

字串名稱.erase(n);:刪除索引n後所有字元。

字串名稱.erase(n1 , n2 );:刪除索引n1後的n2個字元。

 

 

上一篇:字串 string

下一篇:亂數

arrow
arrow

    埃伯 發表在 痞客邦 留言(0) 人氣()