字符串函数---strstr()、memchr()、strchr()详解及实现

一、strstr()函数:

    strstr():搜索一个字符串在另一个字符串中的第一次出现。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,则返回NULL。

    格式:strstr(str1,str2);

     str1: 被查找目标

     str2: 要查找对象

 

实现代码:

#include<iostream>
#include<assert.h>

using namespace std;


char *strstr_m(const char *str1,const char *str2)
{
	const char *cp=NULL;
	const char *c=str2;
	bool falg=false;

	if(*str2=='\0') return (char*)str1;//当第二个参数为空时,返回str1的首地址
	
	while(*str1!='\0')
	{
		while(*str1==*str2)
		{
			if(!falg)
			{
				falg=true;
				cp=str1;
			}
			str1++;
			str2++;
			if(*str2=='\0')
				return (char*)cp;
		}
		str1++;
		cp=NULL;
		falg=false;
		str2=c;
	}
	return (char*)cp;
}

int main()
{
	char a[]="lanzhihui is a good boy!";

	char *s=strstr_m(a,"is");//注意:当第二个实参为  ""  时,s指向a数组的首地址

	if(s!=NULL)
	{
		cout<<s<<endl;
	}
	else
	{
		cout<<"Not Find!"<<endl;
	}

	system("pause");
	return 0;
}

运行上面结果为:is a good boy!

 

二、memchr()函数

    memchr():  void *memchr( const void *buffer, int ch, size_t count );

    函数在buffer指向的数组的count个字符的字符串里查找ch 首次出现的位置。返回一个指针,指向ch 在字符串中首次出现的位置, 如果ch 没有在字符串中找到,返回NULL。

 

实现代码:

#include<iostream>
#include<assert.h>

using namespace std;

void *memchr_m(const void *buffer,int ch,int n)
{
	assert(buffer!=NULL);

	char *cp=(char*)buffer;

	while(*cp++!='\0'&&n)
	{
		if(*cp-ch==0)
			return (void*)cp;
		--n;
	}
	return NULL;
}

int main()
{
	char a[]="lanzhihui is a good boy!";

	char *p;
	p=(char*)memchr_m(a,'z',50);

	if(p!=NULL)
	{
		cout<<"Find!"<<endl;
	    cout<<p<<endl;
	}
	else
	{
		cout<<"Not Find!"<<endl;
	}

	system("pause");
	return 0;
}

 

 

三、strchr()函数

    strchr():char *strchr(const char *s,char c);
    功能:查找字符串s中首次出现字符c的位置
    返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL。

 

实现代码:

#include<iostream>
#include<assert.h>

using namespace std;

char *strchr_m(const char *s,int ch)
{
	assert(s!=NULL);

	while(*s!='\0')
	{
		if(*s-ch==0)
			return (char*)s;
		s++;
	}
	return NULL;
}

int main()
{
	char a[]="lanzhihui is a good boy!";

	char *p;

	p=strchr_m(a,'l');

	if(p!=NULL)
	{
		cout<<"Find!"<<endl;
		cout<<p<<endl;
	}

	else
	{
		cout<<"Not Find!"<<endl;
	}

	system("pause");
	return 0;
}

 

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值