1. 程式人生 > >string.find()函式

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()相似,只不過查詢順序是從指定位置向前