文章目录
一. 库函数strstr()
参考文档:strstr - C++ Reference (cplusplus.com)
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
函数描述:查找子字符串
返回指向str1中str2第一次出现的指针,如果str2不是str1的一部分,则返回空指针。
匹配过程不包括结束的空字符,但它到此为止。
函数参数:
- str1:要扫描的C字符串。
- str2:包含要匹配的字符序列的C字符串。
函数返回:指向str2中指定的整个字符序列在str1中第一次出现的指针,如果该序列不存在于str1中,则为空指针。
#include <stdio.h>
#include <string.h>
#include <assert.h>
int main() {
char arr1[] = { "bbbbcaasklfghsa" };
char arr2[] = { "bbc" };
// 调用strstr()函数.
char* ret = strstr(arr1, arr2);
if (ret == NULL)
printf("未找到相应的字串!\n");
else
printf("%s\n", ret);
return 0;
}
三. 模拟strstr()
// str1 为字符串, str2 为子串.
char* my_strstr(const char* str1, const char* str2) {
assert(str1 && str2);
// 定义指向的指针.
const char* s1 = str1;
const char* s2 = str2;
const char* p = s1;
while (*s1 != '\0') {
s1 = p;
s2 = str2;
// 首个字母相同.
while (*s1 != '\0', *s2 != '\0' && *s1 == *s2) {
++s1;
++s2;
}
if (*s2 == '\0') {
return (char*)p;
}
// 上面循环没有对比成功.
++p;
}
return NULL;
}
打印结果:
int main() {
char arr1[] = { "bbbbcaasklfghsa" };
char arr2[] = { "bbc" };
// 调用strstr()函数.
char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
printf("未找到相应的字串!\n");
else
printf("%s\n", ret);
return 0;
}
文章评论