模擬實現strstr函式

2021-07-16 10:19:57 字數 2084 閱讀 7058

首先,你需要了解strstr函式的作用是什麼:strstr函式就是為了判斷你需要查詢的字串在原來的字串中有沒有,如果有,輸出這個字串的位置,沒有,輸出空。

舉個例子吧:給上兩個字元陣列:str1[20]="abcdefg",str2[10]="bcd";通過使用strstr函式可以得到」bcdefg「,輸出的是你需要查詢的字串的位置。

接著,我們來具體講一下實現這個函式的方法吧;

首先,根據strstr函式的實現方法得知函式需要傳進去的引數是兩個字串,而且這兩個字串都是不可更改的,這樣,我們可以利用const來修飾;而且函式返回的也是乙個字串,那麼返回值型別也可以確定,這樣,我們可以寫出這樣乙個函式的定義:char* my_strstr(const char* dest,const char* src){}。其中,dest指向的是目標字串,也就是你需要比較的字串,src指向的是源字串,也就是用來被比較的字串。找不到就可以返回乙個空指標。

實現的思路也是比較簡單的,你可以建立兩個指標,通過遍歷的方式逐個訪問字串,並對這兩個指標一一比較。

舉例說明:給上倆個字串:

str1:abcdefg

str2:bcd

建立兩個指標:char *start=str1; char *substart=str2;

此時,start指向字元a,而substart指向字元b,對start和substart兩個指標解引用並進行比較,判斷是否相等,即*start=*substart;若是兩個相等,則兩個指標都向後移動一位,再解引用進行判斷;若是兩個不相等,那麼start向後移動一位,substart則將會重新指向str2的起始位置,兩個再次進行比較。重複這個過程,直到兩個字串其中乙個或者是兩個都遇到『\0』,遍歷結束。那麼在這裡你就可以採用迴圈的方法來做;迴圈的判斷條件就是(start!='\0' && substart!='\0' && *start==*substart)。

如果到這裡你覺得這個函式就算實現成功的話,那你可就掉到坑里去了。我再舉個例子吧:

str1:abbbcdefg

str2:bbcd

這裡你繼續採用上面的方式做,你會得到不一樣的結果。

指標判斷,當start指向str1中的第乙個b時,substart指向str2中的第乙個b,兩個相等,再往後面遍歷,當start指向第三個b的時候,substart指向c,兩個不相等,那麼此時substart會返回並指向str2中的第乙個b。

注意,此時start指向的還是str1中的第三個b,start並沒有發生移動,再採用如上的方式比較,從str1的第三個b開始,你再也找不到與str2相同的,那麼函式會返回乙個 空,可是顯然第乙個字串中包含你需要的查詢的字串。這樣,我們就需要通過某種方法來解決這個問題。

解決方法其實也是比較簡單的:當兩個字串比較的結果不相等時,我們知道substart,就是指向第二個字串的指標是返回到str2這個字串的起始位置的,而start這個指標並沒有發生任何的變動。再次比較也只能從這個位置繼續向後比較,那麼中間肯定就會有一些字元是沒有辦法比較的。所以,當兩個字元比較不相等時,start這個指標也需要向前返回,不過它回到的不是起始位置了,而是起始位置的下乙個位置,這樣就可以避免重複而無用的比較。所以,我們需要在建立乙個指標cp用來儲存起始位置,並讓start返回到起始位置的下乙個位置。

具體的**實現方法如下:

#define _crt_secure_no_warings 1

#include#include#includechar* my_strstr(const char* dest, const char* src)

if (*substart == '\0')

substart = (char*)src;

cp++;//cp++可以得到原起始位置的下乙個位置

} return null;

}

下面則是測試函式:

int main()

測試得到的結果如下所示:

有什麼不足還請指出以便改正。

模擬實現strstr函式

函式原型 char strstr const char string,const char strcharset 函式功能 搜尋乙個字串在另乙個字串中的第一次出現。返回值 若strcharset是string的子串,則返回strcharset在string的首次出現的位址 如果strcharset不...

模擬實現strstr函式

很多人在學習c的時候會遇到讓模仿一些庫函式,前幾天我寫了,模仿了strcpy和strcat函式,這兩個相對來說十分的常見,模仿起來也相對簡單,之後我會寫一些模仿不常見 並且難度相對較大的一些庫函式。今天模仿的是strstr,首先介紹一下這個函式的功能,執行結果為 很多人在寫這個程式的時候 第乙個wh...

模擬實現strstr函式

strstr函式就是為了判斷你需要查詢的字串在原來的字串中有沒有,如果有,輸出這個字串的位置,沒有,輸出空。舉個例子吧 給上兩個字元陣列 str1 20 abcdefg str2 10 bcd 通過使用strstr函式可以得到 bcdefg 輸出的是你需要查詢的字串的位置。接著,我們來具體講一下實現...