user-0 提问: 返回在两字符串中第一个相同的子串(大于1个字符),并将子串输出

回复:
user: user-0
content: 引用 4 楼 my_live_123 的回复:这第一个也不行，要s1--,s2--。直到遇到相同的，然后比较下一个，一直比较，直到没有相同，如果相同字符大于2就输出啊，你这个无法实现啊！求助，谢谢，分已给。 神linus写的代码  /** 129  * strstr - Find the first substring in a %NUL terminated string 130  * @s1: The string to be searched 131  * @s2: The string to search for 132  */ 133 char *strstr(const char *s1, const char *s2) 134 { 135         size_t l1, l2; 136  137         l2 = strlen(s2); 138         if (!l2) 139                 return (char *)s1; 140         l1 = strlen(s1); 141         while (l1 >= l2) { 142                 l1--; 143                 if (!memcmp(s1, s2, l2)) 144                         return (char *)s1; 145                 s1++; 146         } 147         return NULL; 148 }

user: user-0
content: 引用 6 楼 u014044789 的回复:你这么求不行啊，要是相同的是错位的，你就不能求出来了。。。。。 [quote=引用 5 楼 my_live_123 的回复:]这个高效的我看不懂。怎么这代码不能求出两个字符串的公共子串啊？ memcmp 高效的：   3 int memcmp(const void *s1, const void *s2, size_t len)   4 {   5         u8 diff;   6         asm("repe; cmpsb; setnz %0"   7             : "=qm" (diff), "+D" (s1), "+S" (s2), "+c" (len));   8         return diff;   9 }   用户的：  651 int memcmp(const void *cs, const void *ct, size_t count) 652 { 653         const unsigned char *su1, *su2; 654         int res = 0; 655  656         for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) 657                 if ((res = *su1 - *su2) != 0) 658                         break; 659         return res; 660 }   这就是神写的代码[/quote]

user: user-0
content: 引用 5 楼 my_live_123 的回复:这个高效的我看不懂。怎么这代码不能求出两个字符串的公共子串啊？ memcmp 高效的：   3 int memcmp(const void *s1, const void *s2, size_t len)   4 {   5         u8 diff;   6         asm("repe; cmpsb; setnz %0"   7             : "=qm" (diff), "+D" (s1), "+S" (s2), "+c" (len));   8         return diff;   9 }   用户的：  651 int memcmp(const void *cs, const void *ct, size_t count) 652 { 653         const unsigned char *su1, *su2; 654         int res = 0; 655  656         for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) 657                 if ((res = *su1 - *su2) != 0) 658                         break; 659         return res; 660 }   这就是神写的代码

user: user-1
content: memcmp 高效的：   3 int memcmp(const void *s1, const void *s2, size_t len)   4 {   5         u8 diff;   6         asm("repe; cmpsb; setnz %0"   7             : "=qm" (diff), "+D" (s1), "+S" (s2), "+c" (len));   8         return diff;   9 }   用户的：  651 int memcmp(const void *cs, const void *ct, size_t count) 652 { 653         const unsigned char *su1, *su2; 654         int res = 0; 655  656         for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) 657                 if ((res = *su1 - *su2) != 0) 658                         break; 659         return res; 660 }   这就是神写的代码

user: user-1
content: 神linus写的代码  /** 129  * strstr - Find the first substring in a %NUL terminated string 130  * @s1: The string to be searched 131  * @s2: The string to search for 132  */ 133 char *strstr(const char *s1, const char *s2) 134 { 135         size_t l1, l2; 136  137         l2 = strlen(s2); 138         if (!l2) 139                 return (char *)s1; 140         l1 = strlen(s1); 141         while (l1 >= l2) { 142                 l1--; 143                 if (!memcmp(s1, s2, l2)) 144                         return (char *)s1; 145                 s1++; 146         } 147         return NULL; 148 }

user: user-0
content: 求大大来解答啊

user: user-0
content: 5，输入两个数，第一个数决定一个nXn的矩阵，第二个数决定从1开始赋值，赋值的上限   比如：  输入:5 18   输出：  1  2  3  4  5  16 17 18 0  6   15 0  0  0  7  14 0  0  0  8  13 12 11 10 9    输入: 4 12   输出:  1 2 3 4  12 0 0 5  11 0 0 6  10 9 8 7

user: user-0
content: 4，输入一个IP地址，判断时候ip地址合法    ip地址由4位0-255组成 中间使用 . 隔开  合法的ip地址是:    21.45.34.112   是合法的    第一位不能为全0  0.45.34.112   是不合法的    每一位不能超过255 Input 21.45.34.222 Output YES