user-0 提问: 帮忙解答一道题谢谢！！！

回复:
user: user-0
content: 非常感谢各位热心的解答

user: user-1
content: for (i; search[i] != '\0';++i) 这里应该是判断string是否到达\0，而不是search

user: user-2
content: 我真的没看懂你的逻辑，没看出你代码有查找子串的点 总的来说你可以有以下思路  循环被查找字符串 如果某个字符匹配查找串的第一个字符，那么判断后续的字符是否相同 相同就返回这个索引 否则查找下一个被查找串的字符，直至结束，如果都没有就返回-1  以下是我写的一个版本  int findstring(char string[], char search[]) {     int idx1 = 0, idx2, idx3;     if (!string) //如果被查找串为NULL，返回-1         return -1;     if (!search || !search[0]) //如果查找串没有数据，返回0         return 0;      for (; string[idx1]; idx1++)     {         idx2 = idx1;         idx3 = 0;         // 如果被查找串的idx1位置的字符跟search首字符相同，就继续判断后续         // 直到字符串结束或者某个对应字符不相同         while (string[idx2] && search[idx3] && !(string[idx2] - search[idx3]))             idx2++, idx3++;         if (!search[idx3]) //如果search串判断到最后'\0'的位置，意味着它是string的子串             return idx1;     }      return -1; }  int main() {     int pos1 = findstring("xxssssddxs", "sddx");     int pos2 = findstring("xxssssddxs", "sdxs");     int pos3 = findstring("xxssssddxs", "s");     int pos4 = findstring("xxssssddxs", 0);     int pos5 = findstring(0, "xxs");     int pos6 = findstring("xx", "");     int pos7 = findstring("", "");      return 0; }

user: user-3
content: 引用 2 楼 ifyykp 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] #include <stdio.h> #include <string.h>   int findString(char *string, char *search); int find_string(char *src, char *subsrc); int main(void) {     char *src = "helloworld";     char *subsrc = "rld";      printf("pos = %d\n", findString(src, subsrc));     printf("pos = %d\n", find_string(src, subsrc));     return 0; }  int findString(char *string, char *search) {     int i;      for (i = 0; i < strlen(string); i++) {         if (strncmp(string+i, search, strlen(search)) == 0)             return i;     }      /* Can't find it!*/     return -1; }  int find_string(char *src, char *subsrc) {     int i, j, pos;      for (i = 0; i < strlen(src); i++) {         pos = i;         for (j = 0; j < strlen(subsrc); j++) {             if (src[pos++] != subsrc[j])                 break;         }         if (j >= strlen(subsrc))             return i;     }     /*Can't find it*/     return -1; } 两种方法，一个是调用字符串库函数，一个自定义。当然还有其他方法来实现，可以动手写写。  能写下没指针自定义的吗？你这里应该用了指针对吧？ [/quote]他只是用指针传递了一下地址。取值还是用的数组

user: user-4
content: 引用 2 楼 ifyykp 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] #include <stdio.h> #include <string.h>   int findString(char *string, char *search); int find_string(char *src, char *subsrc); int main(void) {     char *src = "helloworld";     char *subsrc = "rld";      printf("pos = %d\n", findString(src, subsrc));     printf("pos = %d\n", find_string(src, subsrc));     return 0; }  int findString(char *string, char *search) {     int i;      for (i = 0; i < strlen(string); i++) {         if (strncmp(string+i, search, strlen(search)) == 0)             return i;     }      /* Can't find it!*/     return -1; }  int find_string(char *src, char *subsrc) {     int i, j, pos;      for (i = 0; i < strlen(src); i++) {         pos = i;         for (j = 0; j < strlen(subsrc); j++) {             if (src[pos++] != subsrc[j])                 break;         }         if (j >= strlen(subsrc))             return i;     }     /*Can't find it*/     return -1; } 两种方法，一个是调用字符串库函数，一个自定义。当然还有其他方法来实现，可以动手写写。  能写下没指针自定义的吗？你这里应该用了指针对吧？ [/quote] 可以，直接将指针换成数组即可。int find_string(char src[], char subsrc[]) 比如上面的定义，函数体不用做任何修改； 其实写成数组形式还是指针形式，最终编译器都会认为是指针形式，与其让编译器翻译一遍，不如直接用指针。

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:#include <stdio.h> #include <string.h>   int findString(char *string, char *search); int find_string(char *src, char *subsrc); int main(void) {     char *src = "helloworld";     char *subsrc = "rld";      printf("pos = %d\n", findString(src, subsrc));     printf("pos = %d\n", find_string(src, subsrc));     return 0; }  int findString(char *string, char *search) {     int i;      for (i = 0; i < strlen(string); i++) {         if (strncmp(string+i, search, strlen(search)) == 0)             return i;     }      /* Can't find it!*/     return -1; }  int find_string(char *src, char *subsrc) {     int i, j, pos;      for (i = 0; i < strlen(src); i++) {         pos = i;         for (j = 0; j < strlen(subsrc); j++) {             if (src[pos++] != subsrc[j])                 break;         }         if (j >= strlen(subsrc))             return i;     }     /*Can't find it*/     return -1; } 两种方法，一个是调用字符串库函数，一个自定义。当然还有其他方法来实现，可以动手写写。  能写下没指针自定义的吗？你这里应该用了指针对吧？

user: user-4
content: #include <stdio.h> #include <string.h>   int findString(char *string, char *search); int find_string(char *src, char *subsrc); int main(void) {     char *src = "helloworld";     char *subsrc = "rld";      printf("pos = %d\n", findString(src, subsrc));     printf("pos = %d\n", find_string(src, subsrc));     return 0; }  int findString(char *string, char *search) {     int i;      for (i = 0; i < strlen(string); i++) {         if (strncmp(string+i, search, strlen(search)) == 0)             return i;     }      /* Can't find it!*/     return -1; }  int find_string(char *src, char *subsrc) {     int i, j, pos;      for (i = 0; i < strlen(src); i++) {         pos = i;         for (j = 0; j < strlen(subsrc); j++) {             if (src[pos++] != subsrc[j])                 break;         }         if (j >= strlen(subsrc))             return i;     }     /*Can't find it*/     return -1; } 两种方法，一个是调用字符串库函数，一个自定义。当然还有其他方法来实现，可以动手写写。