#include<stdio.h>
#include<string.h>
#include<assert.h>
//将主串str中的字符一一与子串sub中的字符比较
//字符相等-----主串、子串指针均加1继续比较
//字符不相等-------主串指向上次匹配起始位置加1,子串指向字符串起始位置
//若子串一直匹配至指针指向尾部即'\0',则存在-----返回主串指针所指向最后一次进行匹配的起始位置
//若主串一直匹配至指针指向尾部且子串指针未指向尾部,则不存在------返回NULL
//匹配结果通过判断函数返回值来反馈
char *my_strstr1(char *str, char *sub)
{
int flag = 0;
int i = 0;
int j = 0;
while(str[i] != 0 && sub[j] != 0)
{
if(str[i] == sub[j])
{
i++;
j++;
}
else
{
i = ++flag;//i = j - 1//减少临时变量
j = 0;
}
}
return &str[flag];
}
char *my_strstr2(char *str, char *sub, int len)
{
int i;
for(i = 0; str[i] != 0; i++)
{
if(strncmp(str + i, sub, len) == 0)
{
return str + i;
}
}
}
//先标记在主串中与子串首字符相同的位置做标记
//将子串依次与以标记位为首字符的字符串作比较------strncmp
char *my_strstr3( char *str, char *sub, int len)
{
char a = *sub;
char *p = NULL;
while(*str != 0 )
{
p = strchr(str++, a);
if( (p != NULL) && (strncmp(p , sub, len) == 0))
{
return p;
}
else
{
p = NULL;
}
}
}
int main()
{
char *str = "ABABCABCD";
char *sub = "BCAB";
int len = strlen(sub);
//if(*my_strstr1(str, sub))
//if(*my_strstr2(str, sub, len))
if(*my_strstr3(str, sub, len))
{
printf("exit!");
}
else
{
printf("not exit!");
}
getchar();
return 0;
}
朴素匹配(my_strstr函数实现:strncmp/strchr)
最新推荐文章于 2023-04-02 19:56:25 发布