strstr函数的对比

程序员面试宝典上有道题目:

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

const char * strstr1(const char *string,const char * strCharSet)
{
	for(int i=0;string[i]!='\0';i++)
	{
		int j=0;
		int temp=i;
		if(string[i]==strCharSet[j])
		{
			while(string[i++]==strCharSet[j++])
			{
				if(strCharSet[j]=='\0')
					return &string[i-j];
			}
			i=temp;
		}
	}
	return NULL;
}
上述代码中,是在字符串string中搜索字符串strCharSet。思路是,外层for循环遍历string,每次遍历中,把string的每一个元素和strCharSet的起始元素进行比较,若不相同则比较下一个元素;若相同把此时string元素的下标赋值给一个临时变量temp,从这个相同的元素起,内层while循环继续比较string和strCharSet的元素,直到strCharSet中遇到‘\0’。若在内层循环比较的过程中,有元素不同,则跳出内层while循环,执行外层for循环。

以下代码来自百度百度:

char *strstr2(char*s1,char*s2)
{
    if(*s1==0)//s1为空字符串
    {
        if(*s2)//s2不为空字符串
            return (char*)NULL;//空指针
        return (char*)s1;//s2为空字符串
    }
    while(*s1)
    {
        int i=0;
        while(1)
        {
            if(s2[i]==0)
                return s1;
            if(s2[i]!=s1[i])
                break;
            i++;
        }
        s1++;
    }
    return (char*)NULL;
}
上述代码具有查错功能。

当s1为空字符串,s2不为空字符串,函数返回NULL。

当s1为空字符串,s2为空字符串,函数返回s1的地址。

外层while循环没进行一次,s1的值加1。

内层while循环实现比较字符换元素的功能,当元素相同的时候,继续比较下一个元素直到

当s2达到‘\0’时,则返回此时s1的值。一旦元素不同,则使用break语句跳出内层while循环。


上述两种strstr函数的写法虽然形式上看来有些不同,但是分析下来,整个思路是相同,万变不离其宗。

测试函数:

int main()
{
	char *string="Hello world!";
	cout<<string<<endl;
	cout<<strstr("Hello world!","world")<<endl;
	cout<<strstr1("Hello world!","world")<<endl;
	cout<<strstr2("Hello world!","world")<<endl;
	return 0;
}

测试结果:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值