使用C语言模拟使用strstr函数 定义:strstr 是一个 C 标准库函数,用于在一个字符串中查找另一个字符串的第一次出现位置。strstr 函数的声明如下: char* strstr(const char* haystack, const char* needle); 它接受两个参数:haystack 和 needle,分别表示要搜索的字符串和要查找的目标字符串。该函数返回一个指向目标字符串第一次出现位置的指针,如果未找到目标字符串,则返回 NULL。 思路:一般情况:str1 str2字符相同时,就进行循环比较,如果str2遍历完成,证明为子字符串,返回第一次出现的位置。特殊情况:如果str1出现多个相同字符,那么就需要改变str1字符位置,而str2不变。所以需要使用到2个临时指针变量来进行记录地址,防止丢失地址。 #include <stdio.h> #inlcude <assert.h> char* my_strstr(const char* str1, const char* str2) { assert(str1 && str2); const char* s1; const char* s2;//可能出现多个相同字符,所以需要使用多个临时指针变量 const char* cp = str1;//接收str首地址,进行遍历 if (*str2=='\0')//如果str2是一个空字符串 返回str1 { return str1; } while (*cp) { s1 = cp; s2 = str2; while (*s1 == *s2 && *s1 && *s2)//如果找到了相同的字符,那么就开始继续比较后面的字符 { s1++; s2++; } if (*s2 == '\0')//如果*s2遍历完成,证明属于str1字符串的子字符串,则返回cp { return cp; } cp++;//如果没有找到,那么就改变s1位置,重新进行循环比较 } return NULL;//循环截止,为空返回NULL } int main() { char arr1[20] = "abbbcdef"; char arr2[20] = "bbc"; char* ret=my_strstr(arr1, arr2); if (ret == NULL) { printf("不存在\r\n"); } else { printf("%s\n", ret); } return 0; }