c语言中逐个检索字符的库函数,C语言库函数strstr的实现
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派3 kali linux很卡,树莓
- 下一篇: c语言编程回文数用数组,【C语言程序设计