字符/字符串 查找函数
来源:互联网 发布:帝国cms模板安装教程 编辑:程序博客网 时间:2024/05/17 04:10
#本篇博客主要内容为模拟实现四个字符/字符串查找函数!
/*
@避免与库函数冲突,命名为my_strchr;my_strrchr;my_strstr;rmy_strrstr;
@避免与库函数冲突,命名为my_strchr;my_strrchr;my_strstr;rmy_strrstr;
*/
#头文件引用在这里一并标出:
#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>
#首先实现兄弟函数 strchr 和strrchr;
/*
模拟实现 strchr 函数
函数原型:char* strchar(char const *str,int ch);
函数功能:
在一个字符串中查找一个字符,返回指向该字符第一次出现位置的指针;
注意事项:
@注意函数的第二个参数是整形值,但是,它包含一个字符值;
@注意函数的返回值是char*,则如果没有找到该字符则必须返回NULL;
代码实现如下;
*/
模拟实现 strchr 函数
函数原型:char* strchar(char const *str,int ch);
函数功能:
在一个字符串中查找一个字符,返回指向该字符第一次出现位置的指针;
注意事项:
@注意函数的第二个参数是整形值,但是,它包含一个字符值;
@注意函数的返回值是char*,则如果没有找到该字符则必须返回NULL;
代码实现如下;
*/
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;}
#运行结果:
/*
模拟实现函数:strrchr;
函数原型:char* strrchr(char const *str, int ch);
函数功能:
在一个字符串中查找一个字符,返回指向该字符最后一次出现位置的指针;
注意事项:
@注意函数的第二个参数是整形值,但是,它包含一个字符值;
@注意函数的返回值是char*,则如果没有找到该字符则必须返回NULL;
@必须找到的是该字符最后一次出现的位置;
代码实现如下:
*/
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;}
#运行结果:
# 接下来实现兄弟函数 strstr 和 strrstr;
/*
模拟实现函数:strstr;
函数原型:char* strstr(char const *s1, char const *s2);
函数功能:
在字符串s1中查找字符串s2第一次出现的起始位置,并返回一个指向该位置的指针;
注意事项:
@如果s2没有完整的出现在s1中,则返回NULL;
@如果s2为NULL,则返回s1;
代码实现如下:
*/
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;}
#运行结果
/*
模拟实现函数: strrstr;
函数原型:char* strrstr(char const *s1, char const *s2);
函数功能:
在字符串s1中查找字符串s2最后一次出现的起始位置,并返回一个指向该位置的指针;
注意事项:
@如果s2没有完整的出现在s1中,则返回NULL;
@如果s2为NULL,则返回s1;
@在这个函数中将调用库中的strstr函数;
代码如下:
*/
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;}
#运行结果:
ps: 文中部分引用《C和指针》;
本篇博客结束!
谢谢!
1 0
- 字符/字符串 查找函数
- 查找字符/字符串的函数
- PHP字符串函数 查找字符位置函数
- 字符及字符串查找函数总结
- 字符串查找字符算法
- C语言——字符串查找字符的两个函数
- string类字符串中的两个查找字符函数
- php strstr查找字符串中是否包含某些字符的查找函数
- php strstr查找字符串中是否包含某些字符的查找函数
- C++【String类】String查找单个字符,查找字符串的函数实现
- 字符串中查找指定字符
- 字符串查找之字符次数
- 查找字符串中指定字符
- 查找字符串中字符地址
- strrchr 字符串中查找字符
- 字符串中字符查找函数:strchr,wcschr 及strrchr, wcsrchr函数
- 字符串内部查找函数
- 字符串内部查找函数
- hihoCoder挑战赛20-题目2 : 展胜地的鲤鱼旗 -DP/分治
- freemark
- static的应用场景
- PhpStorm使用FTP进行远程编辑 及 问题解决
- shell文件属性判断
- 字符/字符串 查找函数
- hdu 4291 矩阵快速幂+找循环节
- Android三种XML解析
- Android 6.0 中新的新技术
- scala tutorial
- DS-5 Development Studio
- 工欲善其事必先利其器
- 飛飛(三十三)深复制体验
- 百度地图API之JavaScript 开源库1