自己动手写strstr

考虑到代码行数,运行效率,优雅与美观等因素,实现如下:

char *my_strstr(char *s1, char *s2)
{
  char *p1, *p2;
  for (p1 = s1, p2 = s2; *p1 && *p2; p1++) {
    if (*p1 == *p2)
      p2++;
    else if (p2 != s2)
      p2 = s2;
  }
  if (!*p2)
    return p1 - (p2 - s2);
  return NULL;
}

测试代码如下:

#include <stdio.h>
#include <string.h>

#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))

int main()
{
    char *testData[][3] = {
        {"12345", "34", "345"},
        {"12345", "345", "345"},
        {"12345", "12", "12345"},
        {"12345", "334", NULL}	   
    };
    int i, ok;
    char *p;
    for (i = 0; i < ARRAY_SIZE(testData); i++) {
        p = my_strstr(testData[i][0], testData[i][1]);
        if (!p) {
            ok = (p == testData[i][3]);
        } else {
            ok = (!strcmp(p, testData[i][2]));
        }
        printf("test %d: %s\n", i, ok ? "ok" : "fail");
    }

    return 0;
}

运行地址点这里