子字串(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個字元。
留言列表