郑州网站建设哪一家好,浙江网站建设推广公司哪家好,搜索大全,阿里 域名解析 网站建设strstr函数的介绍和模拟实现
strstr函数的介绍 资源来源于cplusplus网站 strstr函数声明#xff1a; char *strstr( const char *str1, const char *str2 ); 它的作用其实就是#xff1a; 在字符串str1中查找是否含有字符串str2#xff0c;如果存在#xff0c;返回str2在…strstr函数的介绍和模拟实现
strstr函数的介绍 资源来源于cplusplus网站 strstr函数声明 char *strstr( const char *str1, const char *str2 ); 它的作用其实就是 在字符串str1中查找是否含有字符串str2如果存在返回str2在str1中第一次出现的地址否则返回NULL 不难看出它是定位字符串的
strstr函数是在字符串str1中查找是否含有字符串str2如果存在返回str2在str1中第一次出现的地址否则返回NULL。
1.1用法举例
#includestdio.h
#includestring.h//strstr函数的应用
int main()
{char arr1[] abbbcdef;char arr2[] bbc;printf(%s\n, strstr(arr1, arr2));return 0;
}1.2结果展示 2.strstr函数的模拟实现
2.1模拟分析 对strstr函数有了一定了解后我们开始对strstr函数的模拟—my_strstr函数。 如下图所示假设有两个字符串指针str1, str2分别指向字符串首字母。 要在str1中查找str2并打印出来先判断str1和str2指向的字符是否相等此时有两种情况第一种情况指向的字符不相等str1要指向下一个字符再判断如此循环往复当str1指向的是 ‘\0’ 时可以判断出str1中不存在str2此时返回NULL 第二种情况下指向的字符相等那么不仅str1要向后读取字符str2也要向后读取字符再判断是否相等。 在向后读取字符的过程中仍有两种情况1.str1和str2指向的字符一直相等直到str2指向’\0’这时可以知道str1中存在str2字符串返回的是str1中的str2字串的第一个字符地址 2.str1和str2指向的字符不全相等例如下图中*(str11) str2(str12) (str21)(str13) ! *(str22)此时指针str2就要返回到字符串str2首字符的地址而指针str1需要返回到第一次和str2指向的字符相等的后一个位置即字符串str1中第二个 ‘b’ 的地址。然后又回到一开始的判断。 注字符串名字也是字符串首字符地址。 使用strstr时最终返回str1中第三个字符的地址打印的是该地址后的字符串
2.2代码实现
const char* my_strstr(const char* str1, const char* str2)
{assert(str1 str2);const char* s1 str1;const char* cp str1;const char* s2 str2;//如果子字符串是空的直接返回str1的地址if (*str2 \0)return str1;while (*cp){s1 cp;s2 str2;while (*s1 *s2 (*s1 *s2)){s1;s2;}if (*s2 \0)return cp;cp;}return NULL;}
int main()
{char arr1[] abbbcdef;char arr2[] bbc;const char* ret my_strstr(arr1, arr2);if (ret ! NULL){printf(%s\n,ret);}elseprintf(找不到\n);return 0;
}