在c/c++中 经常遇到 在一个字符串中查找字符 或者查找子串的情况
srtchar,strrchar函数原型声明
char *strchr(const char *string,int c)
char *strrchr(const char *string,int c)
strchar 函数是在字符string 中寻找第一个出现的字符c 并返回位置
strchar 函数是在字符string 中寻找最后一个出现的字符c 并返回位置
strchar 代码实现及测试
#include "stdio.h"
#include "string.h"
#include "assert.h"
char *my_strchr(const char * str,int ch)
{
char *p = NULL;
assert(str);
p = str;
while(*p != '\0')
{
if(*p == ch)
return p;
p++;
}
return NULL;
}
int main(void)
{
char str[] = "i love you forever!";
char *ret = NULL;
char ch;
printf("输入你想要查找的字符 : ");
scanf("%c",&ch);
ret = strchr(str,ch);
if(ret != NULL)
{
printf("你要查找的字符是:%c\n",*ret);
printf("剩下字符串:%s\n",ret);
}
else
{
printf("sorry 没有查找到字符串\n");
}
}
输出:
类似的srtstr,strrstr函数原型声明
char *strstr(const char *s1,const char *s2)
char *strrstr(const char *s1,const char *s2)
strstr 函数是在字符s中寻找第一个出现的子串s2 并返回位置
strrstr 函数是在字符string 中寻找最后一个出现的子串s2 并返回位置
strrchar 代码:
char *my_strrchr(const char * str,int ch)
{
char *p = NULL;
char *pstr = NULL;
assert(str);
p = str;
while(*p != '\0')
{
if(*p == ch)
//return p;
pstr = p;
p++;
}
if(pstr != NULL)
{
return pstr;
}
return NULL;
}
strstr代码:
char *my_strstr(const char * str0,const char *str1)
{
char *pos = NULL;
char *p1 = NULL;
char *p0 = NULL;
assert(str0);
assert(str1);
pos = str0;
while(*pos != '\0')
{
p0 = pos;
p1 = str1;
//while((*p1 != '\0')&& (*p0 != '\0') && (*p1 == *p0))
while(*p1 != '\0'&& *p0 != '\0')
{
if(*p1 != *p0)
{
break;
}
p0++;
p1++;
}
if(*p1 == '\0')
{
return pos;
}
pos++;
}
return NULL;
}
strrstr代码
char *my_strrstr(const char * str0,const char *str1)
{
char *pos = NULL;
char *p1 = NULL;
char *p0 = NULL;
char *last_str = NULL;
assert(str0);
assert(str1);
pos = str0;
while(*pos != '\0')
{
p0 = pos;
p1 = str1;
//while(*p1 != '\0'&& *p0 != '\0')
while((*p1 != '\0')&& (*p0 != '\0') && (*p1 == *p0))
{
p0++;
p1++;
}
if(*p1 == '\0')
{
last_str = pos;
}
pos++;
}
if(last_str != NULL)
{
return last_str;
}
return NULL;
}
strstr函数运行效果
strrstr函数运行效果