string.find()函式
find()
find(‘a’),從字串的0號下標開始查詢(包括0)。
find(‘a’,k),從字串的k號下標開始查詢(包括k)。
其中引數也可以為"a",即既可以查詢字元,也可以查詢字串
返回型別:size_t,即一個無符號整數(按打印出來的算)。若查詢成功,返回按查詢規則找到的第一個字元或子串的位置;若查詢失敗,返回npos,即-1(打印出來為4294967295)。通過判斷返回的pos!=string::npos來說明是否找到子串,也可以通過判斷pos!=-1來說明是否找到子串。
應用舉例:
//找出字串str中所有的"abc"(輸出位置),若未找到,輸出"not find!" #include<iostream> #include<string> using namespace std; int main() { string str("babccbabcaabcccbabccabcabcabbabcc"); int num = 0; size_t fi = str.find("abc", 0); while (fi!=str.npos) { cout << fi << " "; num++; fi = str.find("abc", fi + 1); } if (0 == num) cout << "not find!"; cout << endl; return 0; } //執行結果: //1 6 10 16 20 23 29
rfind()
rfind()與find()很相似,差別在於查詢順序不一樣,rfind()是從指定位置起向前查詢,直到串首。例如,上例中的st1.rfind(‘a’,7)一句,就是從st1的位置7(st1的最後一個字元b)開始查詢字元a,第一次找到的是倒數第2個字元a,所以返回6。
find_first_of()
在源串中從位置pos起往後查詢,只要在源串中遇到一個字元,該字元與目標串中任意一個字元相同,就停止查詢,返回該字元在源串中的位置;若匹配失敗,返回npos。
引數:find_first_of(string,pos),若pos不存在,則預設從0號下標開始查詢
例:
string str1(“bcgjhikl”);
string str2(“kghlj”);
cout << str1.find_first_of(str2, 0) << endl;//從str1的第0個字元b開始找,b不與str2中的任意字元匹配;再找c,c不與str2中的任意字元匹配;再找g,g與str2中的g匹配,於是停止查詢,返回g在str1中的位置2
find_last_of()
該函式與find_first_of()函式相似,只不過查詢順序是從指定位置向前。
引數:find_last_of(string,pos),若pos不存在,則預設從最後一位開始查詢
find_first_not_of()
在源串中從位置pos開始往後查詢,只要在源串遇到一個字元,該字元與目標串中的任意一個字元都不相同,就停止查詢,返回該字元在源串中的位置;若遍歷完整個源串,都找不到滿 足條件的字元,則返回npos。
find_last_not_of()
find_last_not_of()與find_first_not_of()相似,只不過查詢順序是從指定位置向前