// 最大子字符串.cpp : 定义控制台应用程序的入口点。 // //找出两个字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的最大子串为"actyet" #include <iostream> #include <string> using namespace std; string MaxSameStr(string str1,string str2) { string result; int max=0,first; int len=0;//相同字符串的长度 int k,q; //穷举 for(unsigned int i=0;i<str1.length();i++) for(unsigned int j=0;j<str2.length();j++) { unsigned int k=i; unsigned int q=j; if (str1[k]==str2[q])//发现相同的字母 { first=k; //标记起始位置 while(str1[k]==str2[q]&&q<str2.length()&&k<str1.length())//继续比较后面的是否也相同 { k++;q++; } len=k-first; if(len>max)//是否为目前最长字符串 { max=len; string temp(str1,first,len); result=temp; } } } return result; } int main() { string Str1,Str2; cout<<"请输入两个字符串"<<endl; cin>>Str1>>Str2; cout<<"结果为"<<MaxSameStr(Str1,Str2)<<endl; return 0; }
//特别是这句while(str1[k]==str2[q]&&q<str2.length()&&k<str1.length())要加上后面的q<str2.length()&&k<str1.length(),不然会导致字符串越界。。