//原程序见 http://blog.programfan.com/article.asp?id=14838 #include<iostream>#include<string>using namespace std;void maxstring(string str1,string str2){ int max,tag,i,j; int length1=str1.size(); int length2=str2.size(); int a[length1+1][length2+1]; for(i=0;i< length1;i++) for(j=0;j< length2;j++) a[i][j]=0; //初始化状态a[0][0...length1]和a[0..length2][0] for (j = 0; j < length2; j++) if (str1[0] == str2[j])a[0][j] = 1; for (i = 0; i < length1; i++) if (str1[i] == str2[0])a[i][0] = 1; max = a[0][0]; tag = 0; /*应该是从0开始吧,还不能有=,否则会越界。虽然这样做也没什么错(不知道为什么没有错,郁闷当中)*/ for(i=1;i<length1;i++) for(j=1;j<length2;j++) if(str1[i]==str2[j]) { a[i][j] = a[i-1][j-1]+1; if(max<a[i][j]) { max=a[i][j]; tag=i; } } if(max==0){cout<<"no found same string!";return ;} cout<<"output the max same string:";//这里i应该为tag-max+1,兄弟也太粗心了吧 for(i=tag-max+1;i<=tag;i++) cout<<str1[i]; cout<<endl<<"the length is:"<<max<<endl;}int main(){ string str1,str2; cout<<"enter the two strings!"<<endl; cout<<"string 1:"; cin>>str1; cout<<"string 2:"; cin>>str2; maxstring(str1,str2); system("pause"); return 0;}

评论