【无浪】串之KMP算法一
来源:互联网 发布:js仿网易新闻导航栏 编辑:程序博客网 时间:2024/06/10 09:20
感觉数据结构不能当一门课程去学,要当工作去做。
KMP算法之一按照定义来做的。
#include<iostream>#include<string>using namespace std;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define INFEASIBLE -1#define OVERFLOW -2#define Status intclass String{protected:int length;string str;public:string getstr(){return str;}Status StrAssign(string chars){str=chars;length=chars.length();return OK;}Status Strcopy(String S){str=S.getstr();length=S.getstr().length();return OK;}Status StrCompare(String T){if(length>T.length)return 1;elseif(length<T.length)return -1;else return 0;}Status StrLength(){return length;}Status StrClear(){str="";length=0;return OK;}Status Concat(String S1,String S2){str=S1.getstr()+S2.getstr();length=S1.StrLength()+S2.StrLength();return OK;}String SubString(int pos,int len){if((pos<1||pos>length)||(len<pos||len>length)){String empty;empty.StrAssign("");return empty;}String sub;int i;string temp;for(i=pos-1;i<len;i++){temp+=str[i];}sub.StrAssign(temp);return sub;}Status Index(String T,int pos){int i=pos,j=1,m,n;int *next=setnext(T.getstr());while(i<=length && j<=T.StrLength()){ if(j!=0){cout<<endl;for(m=0;m<length;m++){cout<<str[m]<<" ";}cout<<endl;for(n=0;n<i-j;n++){cout<<" ";}for(n=0;n<T.StrLength();n++){cout<<T.getstr()[n]<<" ";}cout<<endl;for(n=0;n<i-j;n++){cout<<" ";}for(n=1;n<=T.length;n++){cout<<next[n]<<" ";}}if(j==0||str[i-1]==T.getstr()[j-1]){++i;++j;}else j=next[j];}cout<<endl;if(j>=T.StrLength())return i-T.StrLength();else return 0;}int* setnext(string str){ string str1="",str2="";int *next=new int[str.length()+1]; int sum=2; bool judge; next[0]=0;next[1]=0; int i,k,j; for(j=2;j<str.length()+1;j++){ judge=false; for(k=2;k<j;k++){ str1=""; str2=""; for(i=1;i<=k-1;i++){ str1+=str[i-1];} for(i=j-k+1;i<=j-1;i++){ str2+=str[i-1];} if(str1==str2){ next[j]=k; judge=true;}} if(!judge)next[j]=1;}return next;}void display(){cout<<str<<endl;}};int main(){// 0 1 1 2 2 3 4 3 4 5String text;text.StrAssign("aaaabababac");String text1;text1.StrAssign("abac");cout<<text.Index(text1,1)<<endl;return 0;}
0 0
- 【无浪】串之KMP算法一
- 【无浪】串之KMP算法之二
- KMP算法 --数据结构实验之串一:KMP简单应用
- 字符串查找算法之(一)KMP算法
- 【算法之字符串(一)】KMP算法详解之下
- KMP算法 KMP模式匹配 一(串)
- 【算法之字符串(一)】KMP算法详解之上:适合初学KMP算法的朋友
- 串匹配算法之最终版KMP算法
- 串匹配算法之KMP算法
- 算法之KMP算法
- KMP算法详解<一>
- KMP算法(一)
- KMP算法(一)
- KMP算法(一)
- 【kmp算法】数据结构实验之串三:KMP应用
- 每日一算法----KMP算法
- 模式匹配之KMP算法的理解(一)
- 模式串匹配之KMP算法详解
- android:visibility="gone"
- HDU2014 青年歌手大奖赛_评委会打分
- Collections
- iOS视图控制器之间delegate传值教程
- 《重要》从用户模式切换到内核模式的完整过程分析
- 【无浪】串之KMP算法一
- 黑马程序员--java入门之继承
- 工作这些年——编程学习之路回顾
- eclipse自动换行
- 开发前的准备
- hdoj 1027 Ignatius and the Princess II 【逆康托展开】
- OTNframedelay
- osg for android (二) 几何物体的颜色显示以及纹理贴图
- Java常容易忽略的知识点面试点