VC语言

本类阅读TOP10

·VC++下使用ADO编写数据库程序
·VC++ 学习笔记(二)
·Windows消息大全
·每个开发人员现在应该下载的十种必备工具
·在2000和xp下,隐藏进程,VC6.0测试通过!!!
·用Visual C++打造IE浏览器(1)
·Netmsg 局域网聊天程序
·教你用VC6做QQ对对碰外挂程序
·VC++学习笔记(四)
·VC++中经常使用的函数!~~

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
我写的KMP 算法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

#include<iostream>
#include<time.h>
#include<string>
using namespace std;
void init(string ,string);
void show(char [],int);
int kmp(string ,string,int pos);
void get_next(char*,int *);
string s1,t1;
int m,n;
char *s;
char *t;
int *next;
/*************************MAIN**************************************/
int main(int argc[],char*args[])
{
   
 double t=clock();
 cout<<"找到位置为:"<<kmp("acbsabcaacabaabaabcacaabc","abaabca",1)<<endl;
    delete[] s;
 delete[] next;
 cout<<"耗时:"<<(clock()-t)/1000<<"毫秒!"<<endl;
 return 0;
}  
/**********************++++NEXT++++********************************/
void get_next(char s[],int ne[])
{
    ne =new int[n+1];
    next=new int[n+1];
    ne[0]=9999;
    int i(1),j(0);
    ne[1]=0;
    while(i<=(int)(t[0]))//数组是字符型的,要转化为整数
 {
     if(j==0||t[i]==t[j]){++i;++j;ne[i]=j;}
     else j=ne[j];
 }
   for( i=1;i<=n;i++)
   {
   cout<<"next["<<i<<"]="<<ne[i]<<endl;
      next[i]=ne[i];
   }
}
/********************++++KMP+++**********************************/
  int kmp(string s0,string t0,int pos)
  {
        init(s0,t0);
        int i=pos,j=1;
        while(i<=((int)(s[0]))&&(j<=((int)(t[0]))))
  {
         if((j==0)||(s[i]==t[j])){++i;++j;}
      else j=next[j];
        
  }
        if(j>(int)(t[0])) return i-((int)(t[0]));
        else return 0;

  }
/***************++++INIT+++*****************************************/
    void init(string ss,string tt)
 {
       //cout<<"请输入原串S=: "<<endl;
       //cin>>s1;
       //cout<<"请输入模式串T=:"<<endl;
       //cin>>t1;
       s1=ss;
       t1=tt;
       m=s1.length();
       n=t1.length();
       //if((s=(char*)malloc((m+1)*sizeof(char)))<0){cout<<"failed\n";return;}
       s=new char[m+1];
       s[0]=m;
       //if((t=(char*) malloc((n+1)*sizeof(char)))<0) {cout<<"failed\n";return;}
       t=new char[n+1];
       t[0]=n;
       for(int i=1;i<=m;i++)
      s[i]=s1.at(i-1);
       for( i=1;i<=n;i++)
         t[i]=t1.at(i-1);
        cout<<"原串为: ";    show(s,m);
     cout<<"模式串为: ";  show(t,n);
        get_next(t,next);
 }
/*******************++++SHOW+++**************************************/
       void show(char s[],int n )
    {
         for(int i=1;i<=n;i++)
         cout<<s[i]<<"  ";
         cout<<endl;
         cout<<"长度为: "<<int(s[0])<<"\n";
    }




相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有