字符串的查找
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="" />
相关文章推荐
- raw和assets
- C++类虚函数表
- flexbox弹性盒子布局
- 字符串的查找
- java对象和json对象之间互相转换
- 高并发通用技术点
- 3.6 锐化空间滤波器
- 为什么开发人员不希望做代码检视???
- js中使用控件名和数组下标方式获取控件的值时失败
- bootstrap - btn
- 3.10 布局方面慎用div,避免造成div泛滥
- iOS实现手势解锁操作
- C++中引用、指针,传值的联系和区别
- 林业病虫害预警机制的思考
- Linux内核中的初始化initcall
- nyoj 42 一笔画问题
- 项目管理方法---基层项目经理如何激励自己的团队
- 程序员:伤不起的三十岁
- Neon 指令集 ARMv7/v8 对比
- Spring读书笔记-----Spring的Bean之Bean的基本概念