字符串操作函数模拟之番外篇
2016-05-14 17:39
387 查看
一、strchr()
函数原型:char *strchr( const char *string, int c );
strchr()
函数查找字符在指定字符串中首次出现的位置,如果找到,就返回指定字符在已知字符串中最后一次开始出现的位置,找不到就返回NULL。例如:已知字符串“abdedef”,该函数返回“dedef”
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
char *my_strchr(const char *str,int c)
{
assert(str);
while(*str)
{
if(*str == c)
return (char *)str; //找到后返回此时的位置
str++;
}
return NULL; //没找到
}
int main()
{
char *str = "abcdcdef";
char *ret = my_strchr(str,'d');
printf("%s\n",ret);
system("pause");
return 0;
}
二、strrchr()
函数原型:char *strrchr( const char *string, int
c );
strrchr()函数正好与strchr()函数相反,此函数是查找字符在指定字符串中从正面开始数最后一次出现的位置,若找到,就返回最后一次开始出现的位置,否则返回NULL。还用上边的字符串为例,该函数返回的是结果是“def”
下面看三种实现方法:
1.从正面数,保存每个位置,则最后一次找到的即为最后一次出现的字符
2.从后面数,遇到的第一个字符即为最后一次出现的字符
char *my_strrchr(const char *str,int ch)
{
const char *start = str; //将指定字符串首地址保存
assert(str);
while(*str)
{
str++;
}
//str--;
//while(*str--)
//{
// ;
//}
while((str >= start) && (*str != ch))
{
str--;
}
if(*str == ch)
return (char *)str;
return NULL;
}
3.调用strchr函数
char *my_strrchr(const char *str,int ch)
{
const char *cur = NULL;
const char *last = NULL;
assert(str);
while(cur = strchr(str,ch))
{
last = cur; //保存每一次找到的位置
str = cur+1;
}
return (char *)last;
}
三、strrstr()
我们都知道在库函数中有strstr(),它是查找自字符串的,但是类似于上边,我们要是想实现一个函数来返回子字符串在指定字符串中最后一次出现的位置该怎么做呢?!
下面看两种实现方法:
1.从后向前找字符串(由于这种查找凡事不能再遇到'\0',所以不能以'\0'作为循环条件,而用字符串的长度来控制循环)
显然这种方法有点麻烦,而且传参太多。那么就有第二种实现方法了。
2.同实现strrchr一样,调用strstr函数
函数原型:char *strchr( const char *string, int c );
strchr()
函数查找字符在指定字符串中首次出现的位置,如果找到,就返回指定字符在已知字符串中最后一次开始出现的位置,找不到就返回NULL。例如:已知字符串“abdedef”,该函数返回“dedef”
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
char *my_strchr(const char *str,int c)
{
assert(str);
while(*str)
{
if(*str == c)
return (char *)str; //找到后返回此时的位置
str++;
}
return NULL; //没找到
}
int main()
{
char *str = "abcdcdef";
char *ret = my_strchr(str,'d');
printf("%s\n",ret);
system("pause");
return 0;
}
二、strrchr()
函数原型:char *strrchr( const char *string, int
c );
strrchr()函数正好与strchr()函数相反,此函数是查找字符在指定字符串中从正面开始数最后一次出现的位置,若找到,就返回最后一次开始出现的位置,否则返回NULL。还用上边的字符串为例,该函数返回的是结果是“def”
下面看三种实现方法:
1.从正面数,保存每个位置,则最后一次找到的即为最后一次出现的字符
char *my_strrchr(const char *str,int c) { const char *p = NULL; assert(str); while(*str) { if(*str == c) { p = str; //保存每一次出现该字符的地址 } str++; } if(*str != '\0') return (char *)p; return NULL; }
2.从后面数,遇到的第一个字符即为最后一次出现的字符
char *my_strrchr(const char *str,int ch)
{
const char *start = str; //将指定字符串首地址保存
assert(str);
while(*str)
{
str++;
}
//str--;
//while(*str--)
//{
// ;
//}
while((str >= start) && (*str != ch))
{
str--;
}
if(*str == ch)
return (char *)str;
return NULL;
}
3.调用strchr函数
char *my_strrchr(const char *str,int ch)
{
const char *cur = NULL;
const char *last = NULL;
assert(str);
while(cur = strchr(str,ch))
{
last = cur; //保存每一次找到的位置
str = cur+1;
}
return (char *)last;
}
三、strrstr()
我们都知道在库函数中有strstr(),它是查找自字符串的,但是类似于上边,我们要是想实现一个函数来返回子字符串在指定字符串中最后一次出现的位置该怎么做呢?!
下面看两种实现方法:
1.从后向前找字符串(由于这种查找凡事不能再遇到'\0',所以不能以'\0'作为循环条件,而用字符串的长度来控制循环)
char *my_strrstr(const char *str,const char *substr,int len1,int len2) { const char *l_start = str+len1-1; const char *end = substr+len2-1; assert(str); assert(substr); while(len1) { str = l_start; while((len2 != 1) && (*substr == *str)) { str--; substr--; len2--; } l_start = str; if(len2 == 1) return (char *)l_start; if(*str != *substr) { l_start = l_start-1; substr = end; } len1--; } return NULL; }
显然这种方法有点麻烦,而且传参太多。那么就有第二种实现方法了。
2.同实现strrchr一样,调用strstr函数
char *my_strrstr(const char *str,const char *substr) { const char *last = NULL; const char *cur = NULL; assert(str); if(!*substr) return (char *)substr; while(cur = strstr(str,substr)) { last = cur; //每次保存找到的字符串的首位置 str = last+1; //使str指向下一位开始寻找 } return (char *)last; }
相关文章推荐
- php中strstr、strrchr、substr、stristr四个函数的区别总结
- C语言中查找字符在字符串中出现的位置的方法
- php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
- 学习笔记---str族函数
- php函数strrchr()
- strchr
- 截取字符串的部分字符方法
- strchr源码
- strrchr源码
- C语言中 strchr() strncpy()的用法 以及根据某个字符切割字符串
- PHP字符串函数之 strstr stristr strchr strrchr
- C strchr strrchr查找一个字符
- c语言之字符串分离
- strrchr() 函数
- strchr, strrchr函数实现——string.h库函数
- strchr strstr (判断 子字符(串))
- uva_401
- strstr和strcchr查找字符串和区别
- strrchr
- strchr()函数与strrchr()函数的实现