思路
使用两个循环,外循环遍历主串,内循环遍历查找串,主串一个字符一个字符的后移,分别和查找串进行批评,找到了就返回
代码实现
char * mystrstr(char * str, char * sub){
if(NULL == str || NULL == sub){
printf("mystrstr param error\n");
return NULL;
}
char * p = NULL, * q = NULL, * c = NULL;
int found = 0;
p = str;
while(*p != '\0'){
q = sub;
c = p;
while(*c == *q && *q != '\0'){
q++;
c++;
}
if('\0' == *q){
found = 1;
break;
}
p++;
}
if(1 == found){
return p;
} else {
return NULL;
}
}
void testmystrstr(void){
char * str1 = "12345";
char * str2 = "45";
char * str3 = "23";
char * str4 = "25";
char * r = NULL;
printf("\n************ testmystrstr ************ \n");
r = mystrstr(str1, str2);
if(NULL != r){
printf("substr: %s\n", r);
} else {
printf("can not find sub: %s\n", str2);
}
r = mystrstr(str1, str3);
if(NULL != r){
printf("substr: %s\n", r);
} else {
printf("can not find sub: %s\n", str3);
}
r = mystrstr(str1, str4);
if(NULL != r){
printf("substr: %s\n", r);
} else {
printf("can not find sub: %s\n", str4);
}
return;
}
代码编译
gcc main.c str.c -g -o a.exe
调试输出
************ testmystrstr ************
substr: 45
substr: 2345
can not find sub: 25