今天在面试宝典上看到这么一道题:
编程:输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置。例如“yyabcdabjcabceg”,输出结果应该为abc和3。
完整代码网上都有(面试宝典P227也有答案),但是程序有一个缺点,当出现多个长度相同的最长字符串时,源程序只能输出下标靠前的那个串。比如,当输入abcmmeflkabcmme的时候,其输出结果就是abc和0,而少了mme和3.为此我做了一些改进。程序如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str,tep;
int max = 1;
int index[20];
for(int i=0;i<20;i++)
index[i] = 0;
cout << "请输入字符串" << endl;
//str = "adbekladadbedeklalmmeada";
cin >> str;
// cout << str.find(str.substr(4,2)) << endl;
for(int i=str.length()-1;i>1;i--)
for(int j=0;j<str.length();j++)
{
if(j+i<=str.length())
{
size_t t =0;
size_t num = 0;
tep = str.substr(j,i);
t = str.find(tep);
num &