strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL
形式:const char * strstr ( const char * str1, const char * str2 )
整体思路:
start——>str1, substart——>str2
address用来存储str1的首地址
从str1首地址开始判断,遇见和str2字符相同时执行内循环,同时加一,直到其中一个变为‘\0’,退出内循环,当substart为‘\0’时,输出结果;若遇见str2前面部分与str1的一部分相同,后一部分不同,则str1加一,往后推一个,str2则又回到首地址开始下一次判断
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//模拟实现strstr
char* Strstr(const char* str1, const char* str2){
assert(str1);
assert(str2);
char* start = (char*)str1; //强制类型转换
char* substart = (char*)str2;
char* address = (char*)str1; //address存str1的地址
while (*address){
start=address;
while (*start != '\0'&&*substart != '\0'&&*start == *substart){
start++;
substart++;
}
if (*substart == '\0'){
return address;
}
address++;
substart = (char*)str2;
}
return NULL;
}
int main(){
char str1[] = "This is a simple string";
char str2[] = "simple";
char *p = Strstr(str1, str2);
printf("%p\n", p);
system("pause");
return 0;
}