自己写的strstr函数大部分的时候都能用,为什么遇到这个题目就出问题了,不知道返回值哪里出问题了。

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