实现方式一
#include <stdio.h>
#include <string.h>
#include <assert.h>
typedef unsigned int unint;
const char* my_strstr(const char* p1, const char* p2) {
assert(p1 && p2);
//匹配到子串计数,计算来比较子串是否完全被匹配
unint count = 0;
//如果子串未完全匹配,则重新计数以便完全匹配
int flag = 1;
// count 和 p2_len 进行比较,只有相等,才说明子串被完全匹配
unint p2_len = strlen(p2);
if (p2_len == 0)
return NULL;
while (*p1 != '\0') {
if (*p1 == *p2) {
p2++;
count++;
flag = 0;
}
if (count == p2_len) {
return p1 - p2_len + 1;
}
if (flag) {
flag = 0;
}
p1++;
}
return NULL;
}
实现方式二
#include <stdio.h>
#include <string.h>
#include <assert.h>
const char* my_strstr(const char* p1, const char* p2) {
assert(p1 && p2);
if (*p2 == '\0')
return NULL;
const char* s1 = p1;
const char* s2 = p2;
const char* cur = p1;
while (*s1) {
s1 = cur;
s2 = p2;
while (*s1 && *s2 && !(*s1 - *s2)) {
s1++;
s2++;
}
if (*s2 == '\0') {
return cur;
}
cur++;
}
return NULL;
}
验证
int main() {
//const char* p1 = "abbbcdef";
//const char* p1 = "abbbcdef";
const char* p1 = "abSbbcdbbcef";
//const char* p2 = "bbC";
const char* p2 = "bbc";
const char* ret = my_strstr(p1, p2);
if (ret != NULL) {
printf("%s\n", ret);
}
else {
printf("子串不存在");
}
return 0;
}