实现子串查找程序 C++版(2009年华为软件设计大赛编程题)

问题描述: 

判断一个字符串(dst)是否是另一个字符串(src)的子串; 

输出子串在母串中的第一次出现的起始位置; 

匹配的时候不区分大小写; 

不能使用库函数(使用库函数按 0 分计算); 

要求实现函数: 

unsigned int str_str(char * src, char *dst);

返回:如果dst是src的子串  则返回起始位置       如果不是 则返回0

输入:src 指向母串的指针; dst 指向子串的指针

示例 

src->akrsd5859  dst->rsd

则返回3

src->Rstsawerst36ds  dst->rst

则返回8

src->dfsge         dst-> dfsgesa

则返回0

//创建时间20132/9/21
//这个算法我记得有效率更高的,但是一时想不起来就随手敲了这个代码,如果有大神知道希望提醒
#include <iostream>
#include <string>
using namespace std;
unsigned int str_str(char *src,char *dst)
{
	if(strlen(src) < strlen(dst))//如果母串比子串短,直接退出
		return 0;
	for(unsigned int i = 0;i <= strlen(src) - strlen(dst);++i)//比较到俩字符串
	{
		unsigned int j;
		for(j = 0;j < strlen(dst);++j)
		{
			//BEGIN	这一段为不区分大小写代码的代码段,如果区分大小写删除此段代码
			if(((src[i+j] <= 'z' && src[i+j] >= 'a') 
				|| (src[i+j] <= 'Z' && src[i+j] >= 'A'))
				&& ((dst[j] <= 'z' && dst[j] >= 'a')
				|| (dst[j] <= 'Z' && dst[j] >= 'A'))
				)
			{
				if(src[i+j] != dst[j] +32 && src[i+j] != dst[j] -32 && src[i+j] != dst[j])
					break;
			}
			else //END
				if(src[i+j] != dst[j])
			{
				break;
			}
		}
		if(j == strlen(dst))//完全匹配为
		{
			return i+1;
		}
	}
	return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	string str1,str2;
	cin>>str1;
	cin>>str2;
	cout<<str_str((char *)str1.c_str(),(char *)str2.c_str());
	return 0;
}


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值