日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中逐个检索字符的库函数,C语言库函数strstr的实现

發(fā)布時間:2024/1/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中逐个检索字符的库函数,C语言库函数strstr的实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C語言庫函數(shù)用于在字符串中查找子串。函數(shù)原型為char *(strstr)(const char *s1, const char *s2)

函數(shù)的參數(shù)是兩個字符串,函數(shù)返回s2在s1中第一次出現(xiàn)的位置。如果在s1中沒有找到s2,返回空。

如果s2為空,則返回s1。

實現(xiàn)代碼如下:

char* _strstr(const char *s1, const char *s2)

{

if (*s2 == '/0') /*如果s2為空,則返回s1*/??return ((char *)s1);

for (; s1 != '/0'; ++s1)?/*每次后移s1的位置,在新的位置進行下一次匹配*/

{

const char *sc1, *sc2;

while((*s1 != *s2)&&(*s1 != '/0')) ++s1; /*在s1中找到和s2第一個字符匹配的位置*/

if (*s1 == '/0') /*如果找不到,說明s1現(xiàn)在的位置不匹配,退出循環(huán)進行下一次匹配*/

break;

else /*如果找到和s2第一個字符匹配的位置,開始逐個匹配s2后面的字符*/

for (sc1 = s1, sc2 = s2; sc1 !='/0'; ++sc1,++sc2)

{

if (*sc2 == '/0') /*如果匹配完畢,返回s1此時的位置*/

return ((char *)s1);

else if (*sc1 != *sc2) /*如果后面有一個字符不匹配,說明s1現(xiàn)在的位置不匹配,退出循環(huán)進行下一次匹配*/

break;

}

}

return (NULL) ;

}

最外層的for循環(huán)代表s1每次在一個新的位置匹配s2。進入第一層for循環(huán)后,while循環(huán)代表在s1中找到和s2第一個字符匹配的位置,并更新s1的位置到此處。如果第一個字符匹配,第二層for循環(huán)再逐個匹配后面的字符。哪一個字符不匹配,都退出,在s1新位置進行下一次s2的匹配。如果sc2為空,說明s2全串匹配成功,返回s1。

《The Standard C Library》中的實現(xiàn)如下:

#include

char *(strstr)(const char *s1, const char *s2)

{

if (*s2 == '/0')

return ((char *)s1);

for (; (s1 = strchr(s1, *s2)) != NULL; ++s1)

{

const char *sc1, *sc2;

for (sc1 = s1, sc2 = s2; ; )

{

if (*++sc2 == '/0')

return ((char *)s1);

else if (*++sc1 != *sc2)

break;

}

}

return (NULL) ;

}

它的實現(xiàn)比上一種簡潔,但是調(diào)用了另一個庫函數(shù)strchr。這個函數(shù)的作用是在字符串里查找字符,并返回第一次出現(xiàn)的位置。

總結(jié)

以上是生活随笔為你收集整理的c语言中逐个检索字符的库函数,C语言库函数strstr的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。