> 文档中心 > 100 Days of Code-day28-查找模式-自主实现strstr函数功能

100 Days of Code-day28-查找模式-自主实现strstr函数功能


查找模式的具体功能如上一篇所示。

#include#define MaxSize 100int getline(char *s, int maxlen);const char* mystrstr(const char *str1, const char *str2);int main(int argc, char *argv[]){   int found = 0;   char line[MaxSize];   if (argc != 2)   printf("Usage:find pattern\n");   else   {   while (getline(line, MaxSize) > 0)   {   if (mystrstr(line, argv[1]) != NULL)   {   printf("%s", line);   found++;   }   }   }   printf("%d", found);   return found;}int getline(char *s,int maxlen){   char c;   char *temps = s;   while (-- maxlen > 0 && (c = getchar())!=EOF && c != '\n')   {//--maxlen是为了给换行符留出空间   *s++ = c;   }   if (c == '\n')   *s++ = c;   *s = '\0';   return s - temps;}const char * mystrstr(const char *s1, const char *s2){   int i, j, k, len2, count = 0;   for (len2 = 0; *(s2 + len2) != '\0'; len2++)   ; //len2 becomes the length of s2   for (i = 0; *(s1 + i) != '\0'; i++)   {   if (*(s1 + i) == *s2)   {   for (j = i, k = 0; *(s2 + k) != '\0'; j++, k++)   {   if (*(s1 + j) == *(s2 + k))   count++;   else count = 0;   if (count == len2)   {   return s1 + i;   }   }   }   }   return NULL;}

mystrstr的灵感来源:https://stackoverflow.com/questions/3850241/my-strstr-returning-null-even-if-the-string-to-be-found-is-at-the-index-0

对上述mystrstr函数进行修改之后,使其结构更加紧凑。

const char *mystrstr(const char *s1, const char *s2){int i, len, count = 0, j, k;for (len = 0; *(s2 + len) != '\0'; len++);for (i = 0; *(s1 + i); i++){for (j = i, k = 0; *(s2 + k) && *(s1 + j) == *(s2 + k); j++, k++)count++;if (k == 0 || *(s2 + k))count = 0;if (count == len)return s1 + i;}return NULL;}

终端上的执行结果:

在这里插入图片描述

百科名医