? ? 今天我們來模擬實現strstr這個函數,首先我們先來了解一下這個函數,這個函數原型為

char *strstr(char *str1,char *str2),功能是:從字符串str1中查找是否有符串str2,若str2是str1的子串,則先確定str2在str1的第一次出現的位置,并返回此str1在str2首位置的地址,如果str2不是str1的子串,則返回NULL。下面我們來看代碼:

#include?<stdio.h>
#include?<assert.h>
char?*my_strstr?(const?char?*str,const?char?*substr)
{const?char?*str1?=?str;const?char?*str2?=?substr;const?char?*start?=?NULL;assert(str);assert(substr);while?(*str1){start?=?str1;??//將str1所指向的地址傳給startwhile?(*str1?&&?*str2?&&?*str1?==?*str2)//通過循環在str1中找是否有str2{str1++;str2++;}if?(*str2?==?'\0')return?(char*)start;str1?=?start?+?1;?//str1中沒有找到str2,則指針向后移一位,繼續進行查找str2?=?substr;}return?NULL;
}
int?main()
{char?*p?=?my_strstr("abcccdef","cdef");if?(p?!=?NULL)printf("%s\n",p);
}