strstr through pointers in c language

2019-07-31 03:36发布

is this the standard code for strstr i made????

char* fstrset(char *s,char *t)
{
    int b, i=0,j=0;

 while(*(s+i)!='\0')
 {
  if(*(t+j)=='\0')
   break;
  else if(*(s+i)==*(t+j))
   {
   i++;j++;b=1;
   }
  else
   { i++;b=0;j=0;
   }
 }

    if(b==0)
     return((char*)NULL);
    else if(b==1)
     return(s+i-j);
}

9条回答
Lonely孤独者°
2楼-- · 2019-07-31 04:18

What does this do? It looks like gibberish. Why adding pointers, and mixing them with ints? Sorry, but the whole thing doesn't make sense.

And to answer your question, i don't think so. But if you compile it and it runs, then yes.

Okay, your code does make sense when you look at it closer. Yes, it does look like it will compile, if thats what you mean by standard code.

查看更多
爷、活的狠高调
3楼-- · 2019-07-31 04:31

Besides the bug mentioned by caf there are others:

1) Uninitialized b. If s points to '\0', closing brace may be reached, omitting any return statements.

2) If characters match up to the end of string pointed to by s there is no check if the string pointed to by t ends too.

查看更多
劫难
4楼-- · 2019-07-31 04:31

There is no 'standard code', just the standard result.

It is unlikely that any implementation in a standard C library uses array indexing, so it is unlikely that your code matches any implementation in line-by-line detail.

查看更多
Melony?
5楼-- · 2019-07-31 04:34
char* fstrstr(char *s1,char *s2)
{
 int i=0,flag=0;
 char *s4,*s3;
// s4 for retaining the value of s2
 s4 = s2;
 while(*s1 != '\0' && *s2 != '\0')
 {
  if(*s1 == *s2)
  {
   *(s3+i) = *s1;
   s2++;
   s1++;
   i++;
   flag = 1;
  }
  else
  {
   i = 0;
   s1++;
//   Initialize s2 again from its address
   s2 = s4;
   flag = 0;
  }
 }
 if(flag == 1)
 {
  while(*s1 != '\0')
  {
   *(s3+i) = *s1;
   i++;
   s1++;
  }
  *(s3+i) = '\0';
 }
 if(flag == 1)
  return (s3);

 if(flag==0)
 {
  *s3 = NULL;
  return (s3);
 }
}
查看更多
ゆ 、 Hurt°
6楼-- · 2019-07-31 04:35

a quick read through seems to show that the code works (there are probably edge cases that dont work). You tell us, does it work?

But why do it? just call strstr

查看更多
beautiful°
7楼-- · 2019-07-31 04:36
inline char* strstr(char* __s1, const char* __s2)
{
    return __builtin_strstr(const_cast<const char*>(__s1), __s2); 
}
查看更多
登录 后发表回答