码迷,mamicode.com
首页 > 编程语言 > 详细

从C++strStr到字符串匹配算法

时间:2015-10-01 21:45:37      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

字符串的匹配先定义两个名词:模式串和文本串。我们的任务就是在文本串中找到模式串第一次出现的位置,如果找到就返回位置的下标,如果没有找到返回-1.其实这就是C++语言里面的一个函数:

extern char *strstr(char *str1, const char *str2);

对于这个函数的解释:

str1: 被查找目标
str2: 要查找对象
返回值:如果str2是str1的子串,则返回str2在str1的首次出现的地址;
		如果str2不是str1的子串,则返回NULL。
例如:
char str[]="1234xyz";
char *str1=strstr(str,"34");
cout << str1 << endl;
显示的是: 34xyz

  返回值是一个指针,这个指针指向文本串中第一次出现模式串的位置。


 字符串查找的暴力算法

先看LeetCode上的一道题目,实现这个函数 int strStr(string haystack, string needle); ,要求返回文本串中出现模式串的下标值。

1.如果模式串为NULL,那么直接返回0.
2.如果模式串的长度大于文本串,那么一定查找不到,返回-1.
3.如果存在的话,查找的范围可以限定在文本串的0~s.size()-p.size();

所以暴力算法的代码实现:

int strStr(string haystack, string needle) 
{
	int i = 0;
	//模式串为空
	if(needle.empty())
	{
		return 0;
	}
	//文本串的大小小于模式串
	if(haystack.size() < needle.size())
	{
		return -1;
	}
	//确定查找的范围
	for(i = 0; i <= haystack.size()-needle.size(); ++i)
	{
		int j = 0;
		for(j = 0; j < needle.size(); ++j)
		{
			if(haystack[i+j] != needle[j])
			{
				break;
			}
		}//for
		if(j == needle.size())
		{
			return i;
		}
	}//for
	if(i == haystack.size()-needle.size() + 1)
	{
		return -1;
	}
}

  

从C++strStr到字符串匹配算法

标签:

原文地址:http://www.cnblogs.com/stemon/p/4851524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!