主要的思路就是,不断的从母串 str1 中取出和子串长度相等的临时子串 temp_str,与子串 str2 进行比较。没有找到子串,返回 -1;成功找到子串,返回子串首字母在母串中的位置,该位置从 0 开始。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include <stdio.h> #include <string.h>
char temp_str[30]; // 临时子串
void ReadStrUnit(char * str,char *temp_str,int idx,int len) // 从母串中获取与子串长度相等的临时子串 { int index = 0; for(index; index < len; index++) { temp_str[index] = str[idx+index]; } temp_str[index] = '\0'; }
int GetSubStrPos(char *str1,char *str2) { int idx = 0; int len1 = strlen(str1); int len2 = strlen(str2); if( len1 < len2) { printf("error 1 \n"); // 子串比母串长 return -1; }
while(1) { ReadStrUnit(str1,temp_str,idx,len2); // 不断获取的从 母串的 idx 位置处更新临时子串 if(strcmp(str2,temp_str)==0)break; // 若临时子串和子串一致,结束循环 idx++; // 改变从母串中取临时子串的位置 if(idx>=len1)return -1; // 若 idx 已经超出母串长度,说明母串不包含该子串 }
return idx; // 返回子串第一个字符在母串中的位置 }
int main() { char *str1 = "abcdefghijk"; char *str2 = "def"; int i = 0; i = GetSubStrPos(str1,str2); if( i<0 ) { printf("not found\n"); } else { printf("i = %d\n",i); }
return 0; }
|
原文链接:本人CSDN博客