strncmp/strstr 模拟实现

发布时间 2023-07-24 16:15:37作者: 小蠕虫

const char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
if (!*str2)//逆反逻辑,非0为真,假假为真
return str1;
const char* p1 = NULL;//不改变str1 和str2
const char* p2 = NULL;
const char* start = str1;
while (*start)
{
p1 = start;//p1需要记住与str2字符相同的那个位置
p2 = str2;//p2初始化,用于下次匹配
while (*p1 && *p2 && !(*p1 - *p2))//逆反逻辑,非0为真,假假为真
{
p1++;
p2++;
}
if (!*p2)//逆反逻辑,非0为真,假假为真
{
return start;//找到了
}
if (!*p1)//p1 字符串小于p2
{
return NULL;
}
start++;
}
return NULL;//找不到
}
int main()
{
const char* p1 = "abcdddefabcdef";
const char* p2 = "def";
//const char* ret = strstr(p1, p2);
const char* ret = my_strstr(p1, p2);

if (ret == NULL)
{
printf("不存在\n");
}
else
printf("%s\n", ret);
return 0;
}
int my_strncmp(const char* str1, const char* str2,size_t count)
{
while (count && *str1 == *str2)
{
if (*str1 == '\0')
return 0;
count--;
str1++;
str2++;
}
return(*str1 - *str2);
}
int main()
{
const char* p1 = "abcdef";
const char* p2 = "abcdwe";
//int ret = strcmp(p1, p2);
//int ret = strncmp(p1, p2,3);
int ret = my_strncmp(p1, p2, 5);

printf("%d\n", ret);
return 0;
}