char *
strstr
(
const
char *
str1
,
const
char *
str2
);
该函数是进行字符串截取的,将需截取的字符串中的目标字符串的第一次出现的首地址返回,如果需要得到某个特定的字符串需要多次截取。
模拟实现:
思路是建立两个循环,外层循环控制指针在源字符串中进行向后移动,内层循环控制与源字符串某个字符的地址相同的目标字符串指针和源字符串该字符指针不断向后移动比较。比如源字符串“123456”和目标字符串“456”,当外层循环指针移动到字符4的地址时,内层循环指针同时开始目标字符串中移动,经过456字符的比较,如果目标字符串指针移动到‘\0’,则说明查找成功。在上述过程中,需要不断保存每次内层循环开始时源字符串指针和目标字符串指针,方便下次内层循环的比较过程。
//模拟实现strstr
const char* my_strstr(const char* target,const char* sub)
{
assert(target != NULL);
assert(sub != NULL);
//->target
const char* start = target;
const char* move = NULL;
//->sub
const char* sub_start = NULL;
while (*start) {
sub_start = sub;
move = start;
while (*start&&*move&&*move==*sub_start) {
move++;
sub_start++;
}
if (*sub_start == '\0') {
return start;
}
start++;
}
return NULL;
}