1. 程式人生 > >C/C++庫函式strstr和find實現子字串查詢

C/C++庫函式strstr和find實現子字串查詢

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標頭檔案的區別,請檢視下文連結:

  個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!