string中的find函式
今天看程式碼,發現對STL中find函式掌握還是有點少,現在總結一下find函式的用法。
在非string型別的容器裡,可以直接找出所對應的元素。find函式需要幾個引數:迭代器、下標誌、所要找的元素。
例如:
vector<int> a;
find(a.begin(),a.end(),1);
這句話就表示從a的頭開始一直到尾,找到第一個值為1的元素,返回的是一個指向該元素的迭代器。
find函式一般在string中使用較廣,find函式有一系列的函式,今天簡單總結一下:
1.find()
(1)find()函式查詢第一次出現的目標字串。
#include <string> #include <iostream> using namespace std; int main() { string str1("i am a student"); string str2("student"); string::size_type pos = str1.find(str2,8); //在字串str1中尋找字串str2 if (pos == str1.npos) //對於字串str1中沒有該字串str2的情況做出處理 { cout << "沒有找到str2" << endl; return 0; } cout << "Found str2 at str1: " << pos << endl; //列印字串str2在str1中開始的位置 cout << "Element:" << str2 << endl; return 0; }
若將str1改為“i am a student student”,那麼結果會發生改變嗎?
我們發現答案和第一次執行的結果是一致的,因此find()只返回第一次出現的目標字串。
(2)find(string str, int pos)
如果find()函式中除了有被找尋的字串,還有一位整型數,表示從改位置開始遍歷被搜尋的字串,已找到被找尋的字串。
將上面的程式碼簡單的修改一下
現在從第八位開始遍歷str1,有上面的執行結果我們應該知道現在應該找不到str2,執行結果:
2.find_first_of()
find_first_of()表示查詢字串的某個字元最先出現的位置,find_first_of()不是全匹配,即它不是必須要查詢的字串在被查詢的字串中全部出現,而是出現個別字元即可。
我重新舉一個例子:
#include <string>
#include <iostream>
using namespace std;
int main() {
string numerics("0123456789");
string name("r2d2");
string::size_type pos = name.find_first_of(numerics);
if (pos == name.npos)
{
return 0;
}
cout << "Found numercis at name: " << pos << endl;
cout << "Element:" << name[pos] << endl;
}
可以看出,該函式是將被查詢的字串和查詢的字串中第一個重複的字元的下標返回回來。
3.find_last_of()
find_last_of()函式與find_first_of()功能差不多,只不過find_first_of()是從字串的前面往後面搜尋,而find_last_of()是從字串的後面往前面搜尋。
4.rfind()
rfind()函式是反向查詢字串,即找到最後一個與子串匹配的位置
5.find_first_not_of()
find_first_not_of()函式是找到第一個不與子串匹配的位置