strncmp/strstr 模拟实现
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】