正文

字符串匹配2009-08-18 17:17:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/19880128/46814.html

分享到:

#include <iostream>#include <fstream>#include <istream>using namespace std;struct Solution{ int start; int end; int num; Solution &operator =(const Solution &);};Solution&Solution::operator =(const Solution &souSol){ start=souSol.start; end=souSol.end; num=souSol.num; return (*this);} Solution FindSolution(const int *a,const int num1,const int *b,const int num2);void main(){ ifstream infile("data.txt"); int a[100]; int b[100]; int num1; int num2; int i=0; Solution sol; bool flag=0; while (true) {  if (infile.eof())  {   num2=i;   break;  }  int tmp;  infile>>tmp;  if (tmp<0&&flag==0)  {   flag=1;   num1=i;   i=0;   continue;  }  if (tmp<0&&flag==1)  {   cout<<"shit"<<endl;   exit(1);  }  if (!flag)   a[i]=tmp;  else   b[i]=tmp;  i++; } sol=FindSolution(a,num1,b,num2); cout<<sol.start<<' '<<sol.end<<' '<<sol.num<<endl; cout<<a[sol.start]<<' '<<a[sol.end];} Solution FindSolution(const int *a,const int num1,const int *b,const int num2){ Solution tmp,sol; memset(&sol,0,sizeof(Solution)); int i=0; int j=0; tmp.end=-1; tmp.start=0; tmp.num=0; while (true) {  if (i>=num1||j>=num2)  {   if (tmp.num>sol.num)    sol=tmp;   break;  }  if (a[i]==b[j])  {   tmp.end++;   tmp.num++;   i++;   j++;   continue;  }  if (a[i]>b[j])  {   if (tmp.num>sol.num)    sol=tmp;   tmp.end=i-1;   tmp.num=0;   tmp.start=i;   while(j<num2)   {    if (a[i]<=b[j])     break;    j++;   }  }  if (a[i]<b[j])  {   if (tmp.num>sol.num)    sol=tmp;   tmp.end=i-1;   tmp.num=0;   tmp.start=i;   while(i<num1)   {    if (a[i]>=b[j])     break;    i++;    tmp.end++;    tmp.start++;   }  } } return sol;}

阅读(661) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册