2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

常用的9個字符串C標準庫函數之strstr實現

更新時間:2017-11-14 來源:黑馬程序員 瀏覽量:

之前介紹了經常用到的9個字符串C標準庫函數,這次我們來介紹一下strstr字符串函數的實現。

函數原型:

char * strstr ( const char * str1, const char * str2 );

參數:

str1:需要從其中查找子串的字符串

str2:所要查找的子串

返回:

如果從str1中查找到了str2,則返回str1中第一次出現str2的位置,否則返回NULL.

下面我們來測試一下strstr函數的功能:

//測試程序

#include

#include //strstr

int main()

{

char str[] = "itcastithemia";

char substr[] = "th";//所要查找的子串

char *p = strstr(str, substr);

if (p != NULL)

printf("%s\n", p);

else

printf("not found %s\n", substr);

p = strstr(str, "tha");

if (p != NULL)

printf("%s\n", p);

else

printf("not found %s\n", substr);

return 0;

}

根據我們上面對strstr功能的介紹,第一次查找子串”th”,會查找成功,所以strstr函數會返回th首次出現的地址,而第二次要查找的子串“tha”并沒i用,所以strstr函數會返回NULL.

測試結果如圖:

1510647567672_20171114135104673.jpg

符合我們的預期。

下面自己實現一個strstr函數,思路如下:

1) 從str1的每一個位置開始,依次和str2中的每一個字符進行比較,如果在到str2字符串結尾之前,出現了不等的情況,則結果本輪比較,繼續進行下一輪比較,否則查找子串str2成成,返回str1中本輪開始對比的位置。

程序如下:

char *mystrstr(const char *str1, const char *str2)

{

const char *pstr = str1;

const char *psub = str2;

const char *pcur = NULL;

if (str1 == NULL || str2 == NULL) //判斷參數是否合法

{

return NULL;

}

while (*pstr != '\0')

{

pcur = pstr; //記錄每一次從str1中對比字符的起始位置

psub = str2;

while (*psub != '\0') //從pcur所標示的位置開始依次與psub中的每一個字符進行比較

{

if (*pcur != *psub) //如果出現字符不相等,則結束本次循環指針移動到下一個位置

break;

pcur++;

psub++;

}

if (*psub == '\0') //如果到達子串結尾,則說明查找子串成功

return pstr;

pstr++; //pstr指向str1中的下一個字符串位置

}

return NULL;

}

使用自實現的mystrstr運行上面的測試程序,結果如下:友情提示:獲得更多學科學習視頻+資料+源碼,請加QQ:3276250747。


1510647577953_20171114135123611.jpg

至此,我們成功自實現了一個strstr函數。


本文版權歸黑馬程序員C/C++學院所有,歡迎轉載,轉載請注明作者出處。謝謝!


作者:黑馬程序員C/C++培訓學院


首發:http://c.itheima.com/


分享到:
在線咨詢 我要報名
和我們在線交談!