C/C++庫函式strstr和find實現子字串查詢
阿新 • • 發佈:2019-01-30
1 子字串查詢實現Demo
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
char a[] = "abcddabc";
char b[] = "dda";
int j;
string str1(a);
string str2(b);
//方法一
int i = str1.find(str2); //返回即子字串索引3
//方法二
char *rel = strstr (a, b); //首次出現地址,strstr儲存的是ddabc
if (rel != NULL)
j = rel -a; //根據返回子字串匹配結果輸出索引位
return 0;
}
2 子字串查詢之字串陣列strstr
上面實現子字串查詢主要利用兩個庫函式方法,第一個是字串陣列(char*)實現,string.h或者cstring標頭檔案中strstr函式。第一個引數是主字串,第二個引數是子字串,如果存在返回首次出現的地址,所以需要利用一個字串指標獲取結果(切記:返回非直接索引位!);否則,返回NULL。
我們看看出現地址怎麼轉換到索引位,如下:
if (rel != NULL)
j = rel -a;
我們知道char型別地址分配為1個位元組,rel指向的是查詢到子串在主字串中的地址(例如:0x23544203),而a是主字串的首地址(例如:0x23544200),兩者差值正好就是索引位。
3 子字串查詢之字串string的find方法
string標頭檔案中find函式就是在主字串中查詢子字串的索引。
int i = str1.find(str2); //返回即子字串索引3
4 其它說明
子字串查詢如果手寫,有暴力方法,KMP演算法等等,想詳細瞭解請查閱以下連結:
至於string標頭檔案與cstring標頭檔案的區別,請檢視下文連結:
個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!