●模拟实现库函数char * strstr (char * str1, char * str2 );
strstr函数本为标准库中的函数。
用来判断字符串str2是否为字符串str1的子串。
通过两个指针分别指向字符串str1的首地址,字符串str2的首地址
来逐个字符一一的比较;
当发现str1中有str2的完整字符串,则返回str2在str1中首次出现的地址
若中间出现不一样。则str2的指针回到str2的首地址,
str1的指针不变动,接着一一比较,直到str1遍历完。
若没有找到,返回NULL
代码如下:
char *my_strstr(char *a,char *b)
{
while(*a)
{
char *p=b;
char *q=a;
while(*a==*p&&*p)
{
a++;
p++;
}
if(*p=='\0')
{
return q;
}
else
{
a++;
}
}
return NULL;
}
int main()
{
char a[]="fghasdjkasd";
char b[]="bnm";
printf("%s",my_strstr(a,b));
return 0;
}
///
///
●由库函数char * strstr (char * str1, char * str2 );
衍生出来的求:在a字符串中寻找所有b字符串的个数
通过两个指针分别指向字符串str1的首地址,字符串str2的首地址
来逐个字符一一的比较;
当发现str1中有str2的完整字符串,则个数加一
若中间出现不一样,则str2的指针回到str2的首地址,
str1的指针不变动,接着一一比较,直到str1遍历完。
int fun(char*a,char*b)
{
int k=0;
char *str;
while(*a)
{
str=b;
while(*str)
{
if(*a==*str)
{
str++;
a++;
if(*str=='\0')
{
k++;
}
}
else
{
a++;
break;
}
}
}
return k;
}
int main()
{
char a[]="asdfghjklasdfghjkl";
char b[]="asd";
int n=0;
n=fun(a,b);
printf("%d",n);
return 0;
}
模拟实现库函数strstr以及由strstr函数衍生出来的实际问题
猜你喜欢
转载自blog.csdn.net/cfk17829572643/article/details/109251000
今日推荐
周排行