形式:char * strstr ( const char * str1, const char * str2 );
- strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
- 例如:str1[20]="abcdefg",str2[10]="bcd"。通过使用strstr函数可以得到”bcdefg“,输出的是你需要查找的字符串的位置。
思路
start——>str1, substart——>str2, cp用来存储str1的首地址
从str1首地址开始判断,遇见和str2字符相同时执行内循环,同时加一,直到其中一个变为‘\0’,退出内循环,当substr为‘\0’时,输出结果;若遇见str2前面部分与str1的一部分相同,后一部分不同,则str1加一,往后推一个,str2则又回到首地址开始下一次判断。
代码
char *my_strstr(const char* str1, const char* str2)
{
assert(str1);
assert(str2);
char* start = (char*)str1;
char* substr = (char*)str2;
char* cp = (char*)str1;
if (*str2 == '\0')
return NULL;
while (*cp)
{
start=cp;
while (*start && *substr && *start == *substr)
{
start++;
substr++;
}
if (*substr == '\0')
return cp;
substr = (char*)str2;
cp++;//得到起始位置的下一个位置
}
}