C/C++语言函数库 strchar, strrchar, strstr, strrstr 使用及实现

在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函数运行效果 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值