strstr
字符串查找
库函数声明
char * strstr ( const char *p1, const char *p2 );
从p1中查找有没有出现p2,出现返回p1中出现相同的第一个p2的地址,没出现返回空指针
简单例子
int main()
{
char* p1="abcdefabcdef";
char* p2="def";
char* ret=strstr(p1,p2);
if(ret==NULL)
{
printf("字串不存在\n");
}
else
{
printf(ret);
}
}
//结果:defabcdef
文档里
NULL-空指针
Null/NUL-'\0'
my_strncat实现方法
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char* p1, const char* p2)
{
assert(p1 != NULL);
assert(p2 != NULL);
//直接用p1,p2找不到字符串的起始地址
char* s1 = p1;//例子abbbcdef
char* s2 = p2;//例子bbc
char* cur = (char*)p1;//记录有可能匹配成功的起始地址
if (*p2 == '\0')
{
return (char*)p1;
}
while (*cur)
{
s1 = cur;
s2 = (char*)p2;
while ((*s1 != '\0') && (*s2 != '\0') && (*s1 == *s2))
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cur;//找到子串
}
if (*s1 == '\0')
{
return NULL;//找不到,提前终止
}
cur++;
}
return NULL;//找不到
}
int main()
{
char* p1 = "abbbcdef";
char* p2 = "bbc";
char* ret = my_strstr(p1, p2);
if (ret == NULL)
{
printf("字串不存在\n");
}
else
{
printf("字串存在\n");
printf(ret);
}
}
my_strncat实现方法改进:KMP算法