#include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h>
char* my_strchr(char const *str,int ch) { assert(str); while(*str) { char *ptr = (char*)str; if(*ptr == ch) return ptr ;//注意返回值是char*,如果返回str,注意str的类型 else str++; } return NULL;//如果没找到,则返回值为空; } int main() { char *str = "abcdef"; char key = 'b';//char key = 'g'; char *ret = my_strchr(str,key); printf("%s\n",ret); system("pause"); return 0; }
char* my_strrchr(char const *str, int ch) { char *ptr = NULL;//将ptr初始化为空,你将会发现方便很多; assert(str); while(*str) { if(*str == ch)//每次出现ch 则将ptr置成str; ptr = (char *)str; str++; } /*如果循环结束没有找到则ptr还是为NULL*/ return ptr; } int main() { char *str = "abcadeaf"; char key = 'a';//char key = 'g'; char *ret = my_strrchr(str,key); printf("%s\n",ret); system("pause"); return 0; }
char* my_strstr(char const *s1, char const *s2) { if(s1==NULL) return NULL; /* 如果s2为NULL,则返回s1 */ if(s2==NULL) return (char*)s1; while(*s1) { /* 保存每一次开始的位置,方便返回; */ char *ps1 = (char*)s1; char *ps2 = (char*)s2; while(*ps1&&*ps2&&(*ps1==*ps2)) { ps1++; ps2++; } if(*ps2=='\0') return (char*)s1; if(*ps1!='\0')//检测s2有没有完整的出现在s1中; s1++; } return NULL; } int main() { char *s1 = "abcdef"; char *s2 = "cdef"; printf("%s\n",my_strstr(s1,s2)); system("pause"); return 0; }
char* my_strrstr(char const *s1, char const *s2) { char *last = NULL; char *current = NULL; assert(s1); /* 把指针初始化为我们已经找到的前一次匹配的位置; */ if(*s2!=NULL)//只有s2不为NULL才进行查找,否则返回NULL; { current = (char *)strstr(s1,s2); //因为库函数中的返回值为const char*; /* 每次找到字符串时,让指针指向它的起始位置, 然后查找该字符串下一个匹配位置; */ while(current != NULL) { last = current; current = (char*)strstr(last+1,s2); } } return last;//返回最后一次找到的位置的指针; } int main() { char *s1 = "abcdefabcdefabcd"; char *s2 = "abcd"; printf("%s\n",my_strrstr(s1,s2)); system("pause"); return 0; }
# 完善后的代码,觉得更好看一点!
char* my_strrstr(const char *s1, const char *s2) { const char *cur = NULL; const char *last = NULL; assert(s1); assert(s2); if(!*s2) return (char *)s1; while((cur = strstr(s1,s2))) { last = cur; s1 = cur + 1; } return (char *)last; } int main() { char *s1 = "abcdefbcdef"; char *s2 = "fbc"; char *ret = my_strrstr(s1,s2); if(ret!=NULL) printf("%s\n",ret); system("pause"); return 0; }