标签:函数 字符 strstr
strstr()函数:strstr(str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则返回str2在str1中首次出现的地址:否则,返回NULL。在库函数中strstr()函数的原型是char * strstr ( const char * str1, const char * str2 ),包含在头文件<string.h>中。思路:1.判空及判断str1与str2的长度比较;2. 从字符串str1和str2开始遍历,直到str2结束,即遇见str2的‘\0‘,寻找成功,返回str1与str2第一个字符相等的首地址,否则,返回NULL;3.在第二种情况下,在相同几步之后有可能有不相等的情况,如:“12234”与“234”,则将开始的str1++,重复第2步;
4..在这里写代码时需注意的几点:const(保证了数据的安全性);char*(为了实现链式访问);重复时的处理即第三种情况。相信,细节乃画龙点睛之笔喔!
5.代码:(1)在库中的代码如下:
char * strstr ( const char * str1, const char * str2 ){ char *cp = (char *) str1; char *s1, *s2; if ( !*str2 ) return((char *)str1); while (*cp) { s1 = cp; s2 = (char *) str2; while ( *s1 && *s2 && !(*s1-*s2) )/*在c语言中指针与指针相减,得到的是元素的个数*/
s1++, s2++; if (!*s2) return(cp); cp++; } return(NULL); }
(2)我的代码:
# include <stdio.h>char * my_strstr( const char *s1, const char *s2) { int n=0; //在开始比较字符相等时走的步数 if (*s2) { while (*s1) { if (*(s1 + n) == *(s2 + n)) { if (*(s2 + n + 1) == NULL) { return (char *)s1; } n++; } /* for (n=0; *(s1 + n) == *(s2 + n); n++) { if (*(s2 + n + 1)==NULL) return (char *)s1; } */ s1++; //只要第n次不相等时,就进行s1++,直到满足条件时开始返回执行循环语句 } return NULL; } else return NULL;本文出自 “magoYang” 博客,谢绝转载!
标签:函数 字符 strstr
原文地址:http://10742272.blog.51cto.com/10732272/1765322