char *strstr1(const char *str,const char *substr)
{
int len1=strlen(substr);
int len2=strlen(str);
int ii;
int kk=0;
for(ii=0;ii<=len2-len1;ii++)
{
if((str[ii]==substr[0])&&(str[ii+len1-1]==substr[len1-1])) kk=ii;
}
int jj;
for(jj=0;jj<len1;jj++)
{
if(str[kk+jj]==substr[jj]) continue;
else break;
}
if(jj==len1)
{
char *pos=(char *)str+kk;
return pos;
}
return 0;
}
这是用我写的strstr函数出问题的那个题目
#include"_public.h"
int main()
{
char a[100]="aaa||a||bbb||c||ee||";
char *needle="||";
char *str="bbb";
char *haystack=a;
char *buf=strstr1(haystack,needle);
char *buf1=strstr(haystack,needle);
printf("%s\n%s\n",buf,buf1);
char *str1=strstr1(haystack,str);
printf("%s\n",str1);
while(buf!=NULL)
{
buf[0]='\0';
printf("%s\n",haystack);
haystack=buf+strlen1(needle);
buf=strstr1(haystack,needle);
}
return 0;
}
我自己写的strstr函数查“bbb”返回没问题,查"||"就出问题了,不知道问题出在哪里。
查“||”,gdb调试的时候我和C语言自带的函数返回的结果不一样,但是查“bbb"的结果却是一样的。
会把||当成或判断。而不是字符串了
我又改进了一下,能用了
char *strstr1(const char *str,const char *substr)
{
int len1=strlen(substr);
int len2=strlen(str);
int ii;
for(ii=0;ii<=len2-len1;ii++)
{
if((str[ii]==substr[0])&&(str[ii+len1-1]==substr[len1-1]))
{
break;
}
}
int jj;
for(jj=0;jj<len1;jj++)
{
if(str[ii+jj]==substr[jj]) continue;
else break;
}
if(jj==len1)
{
char *pos=(char *)str+ii;
return pos;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632