模擬實現strstr

2021-08-20 02:13:56 字數 1173 閱讀 4682

函式原型是char*str(char *str1,char *str2);作用是找出str2字串在str1字串中第一次出現的位置(不包括str2的串結束符),如果找到,從str1中的str2位置起,返回str1中str2起始位置的指標,如果沒有,返回null.

舉個例子:str1[32]="abcdedefg",str2[20]=def,通過函式str(str1,str2)可以得到「defg」.

那我們怎麼才能模擬實現strstr函式呢?

首先的思路是建立兩個指標char *p,char *q,而且返回函式定義為char *my_srtsrt(const char *dest,char *scr);分別讓p,q指向

dest(str1傳參)和scr(str2傳參),通過指標來訪問字串。根據上面的例子,p指向a,q指向d,若是兩個相等,則兩個指標都向後移動一位,再解引用進行判斷;若是兩個不相等,那麼向p後移動一位,q不動,兩個再次進行比較。重複這個過程,直到兩個字串其中乙個或者是兩個都遇到『\0『(如果是q遇到『\0』,則找到了;如果是p遇到『\0』,則返回null)。

但是,如果定義char str1[32] = "abbbcdefg";char str2[10] = "bbcd"呢,結果是不是「bbcdefg」呢?

我們來看一下:當p指向a,q指向b,這時兩個不相等,p繼續向下執行;p指向b,這時*p=*q,pq指標同時移動;*p='b',*q='b',兩個還相等,pq指標同時移動;*p='b',*q='c',兩個不相等,p向後移動,而q不動(下次判斷*q="bbcd"重新開始);然後*p='b',*q='b',兩個相等,pq向後移動;*p='c',*q='b',兩個不相等,p繼續向下執行,而q不動;如此迴圈,我們發現沒有找到字串「bbcd」,結果返回null。

中間跳過了乙個字元沒有比較,所以,上面第乙個思路是不可行的。

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

if (*q == '\0')//說明已經找到字串「bbcd」

if (*np == '\0')

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

} return null;//not find

}int main()

執行後的結果就是「bbcdefg」.



模擬實現strstr

strstr str1,str2 函式用於判斷字串str2是否是str1的子串。如果是,則該函式返回str2在str1中首次出現的位址 否則,返回null 形式 const char strstr const char str1,const char str2 整體思路 start str1,sub...

模擬實現strstr

模擬實現strlen 模擬實現strcpy 模擬實現strlcat 模擬實現strcmp 模擬實現memcpy和memmove strstr 思路 讓str和sub兩個指標分別指向源串和字串的起始位置,然後進行比較,如果相等,則str和sub指標同時向後移,在比較下乙個字元 如果不相等,則另str指...

模擬實現strstr函式

首先,你需要了解strstr函式的作用是什麼 strstr函式就是為了判斷你需要查詢的字串在原來的字串中有沒有,如果有,輸出這個字串的位置,沒有,輸出空。舉個例子吧 給上兩個字元陣列 str1 20 abcdefg str2 10 bcd 通過使用strstr函式可以得到 bcdefg 輸出的是你需...