赞
踩
目录
strstr()是一个库函数,头文件为string.h。
其作用是在一个字符串中找另一个字符串,找到了返回第一次出现的首元素地址。没找到就返回空指针。
char * strstr ( const char *, const char * );
strstr()有两个参数,参数1是目标字符串,参数2是源字符串。找到了就返回第一次出现的首元素地址,没找到就返回空指针。
指针str1指向第一个字符串的首元素,指针str2指向第二个字符串的首元素。当str1 != str2时,只有str1向后移动,而str2保持不动。
当str1和str2所指向的内容相同时,那么str1和str2都要向后移动,知道str2指向‘\0'。
因此
1 创建变量和函数
2 找到str1中与str2首元素相同的字符
3 对比str1和str2的字符,直到str2指向'\0'
但是,操作过程中会发现新的问题,例如:
出现这样的问题,我们应该如何调整我们的思路呢?
这个时候,str2必须要回到'c'的位置,重新与str1进行比较,那么,我们可以增加一个变量,暂时存放"cde"的首元素地址。
- char* my_strstr(const char* str1, const char* str2)
-
- int main()
- {
- char arr1[10] = { "abccdefg" };
- char arr2[10] = { "cde" };
- my_strstr(arr1, arr2);
- return 0;
- }
- char* my_strstr(const char* str1, const char* str2)
- {
- //判断一下str1和str2是否为空指针
- assert(str1 && str2);
- //只要*str1还没找到\0,就还可以循环
- while (*str1)
- {
- //如果字符相等,两个字符都往后面挪
- while (*str1 && *str2 && *str1 == *str2)
- {
- str1++;
- str2++;
- //直到第二个字符找到\0
- if (*str2 == '\0')
- {
- return *str1;
- }
- }
- //*str2不等于*str1就只挪*str1
- str1++;
- }
- return NULL;
-
- }
写到这里还没完,这么写就会出现,刚才分析的问题。那要如何解决呢?
增加两个变量,一个存放str1,一个存放str2指向的首元素地址。str1++不会影响p1,str2++也不会影响p2,那么在比较中出现不同的时候,就可以将p2的值赋给str2,再重新比较。
- char* my_strstr(const char* str1, const char* str2)
- {
- assert(str1 && str2);
- //为什么要单独放一个p1 p2呢?
- //防止出现str1[]="abccdefg" 而str2[]="cde"这种情况
- char* p1 = str1;
- char* p2 = str2;
- //只要p1还没找到\0,就还可以循环
- while (*p1)
- {
- str1 = p1;
- str2 = p2;
- //如果字符相等,两个字符都往后面挪
- while (*str1 && *str2 && *str1 == *str2)
- {
- str1++;
- str2++;
- //直到第二个字符找到\0
- if (*str2 == '\0')
- {
- return *str1;
- }
- }
- //*str2不等于*str1就只挪*str1
- p1++;
- }
- return NULL;
-
- }
- char* my_strstr(const char* str1, const char* str2)
- {
- assert(str1 && str2);
- //为什么要单独放一个p1 p2呢?防止出现str1[]="abccdefg" 而str2[]="cde"这种情况
- char* p1 = str1;
- char* p2 = str2;
- //只要p1还没找到\0,就还可以循环
- while (*p1)
- {
- str1 = p1;
- str2 = p2;
- //如果字符相等,两个字符都往后面挪
- while (*str1 && *str2 && *str1 == *str2)
- {
- str1++;
- str2++;
- //直到第二个字符找到\0
- if (*str2 == '\0')
- {
- return *str1;
- }
- }
- //*str2不等于*str1就只挪*str1
- p1++;
- }
- return NULL;
-
- }
- int main()
- {
- char arr1[10] = { "abccdefg" };
- char arr2[10] = { "cde" };
- my_strstr(arr1, arr2);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。