1. 程式人生 > >字串函式---strstr()、memchr()、strchr()詳解及實現

字串函式---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;
}