您的位置:首页 > 其它

字符串的查找

2016-03-10 15:50 183 查看

要求:字符串查找即在主串X中查找是否包含子串Y,与字符串包含不同的是,字符串的查找必须是连续的,即Y中的子串必须在X中连续的出现才算。

如:string main_str="ABCDEF";

string sub_str_1="BCD";

string sub_str_2="ACD";

则在主串main_str中能查找到子串sub_str_1,而不能查找到子串sub_str_2.所以输出结果为1,0.。注意字符串的查找与字符串的包含的不同,具体可参看我的博客字符串的包含

思路:很容易知道此题实质上是字符串匹配,所以我们可以用简单模式匹配算法或kmp算法解决。

基于此思路代码如下:
#include<iostream>
#include<string>
using namespace std;
bool str_find(string main_str,string sub_str)
{
int start=0,j=0;
int i=start;
while(i<main_str.length()&&j<sub_str.length())
//while(main_str[i]!='\0'&&sub_str[j]!='\0')//错误,因为string定义的
//字符串末尾不包含'\0',应该用string类的length()属性
{
//while(j<sub_str.length())最好不while套while
{
if(main_str[i]==sub_str[j])
{
i++;
j++;
}
else
{
//i++;//错误,不能直接这么写,因为当子串部分匹配时,i的值仍加了,所以得用一个标记符,暂存部分匹配时i的起始值,将该值加加
start++;
i=start;
j=0;
}
}
}
if(j>=sub_str.length())
{
return true;
}
else
{
return false;
}

}
void main()
{
int i=0;
char *pstr="ABCDEF";
string main_str="ABCDEF";
string sub_str_1="BCD";
string sub_str_2="ACD";
cout<<str_find(main_str,sub_str_1)<<endl;
cout<<str_find(main_str,sub_str_2)<<endl;
//	while(main_str[i]!='\0')
//	{
//		cout<<main_str[i];
//		i++;
//	}
/*while(pstr[i]!='\0')
{
cout<<pstr[i];
i++;
}*///这一小段程序说明了在c++中用字符指针指向的字符串常量末尾都
//自动的添加了'\0',但在string类定义的字符串常量末尾不包含'\0',
cout<<endl;
}
程序运行结果如下:
<img src="http://img.blog.csdn.net/20160310155915381" alt="" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: