原题:如果字符串的一个子串(其长度大于1)的各个字符相同,则称之为等值子串。试设计一个算法:输入字符串S,以“!”为结束符。如果串S中不存在等值子串,则输出信息:“无等值子串”,否则求出(输出)一个长度最大的子串。
//一定要注意输入的字符串一定要以“!”号结束,否则程序运行出错
#include<iostream.h>
#define SIZE 100
int MaxEqSubStr(char *str,char *sub)
{//由字符串str求其最大等值子串,并将此等值子串赋值给sub
int i=0;//串str的当前字符位置
int start_max=0,len_max=1;
int start=0,len=1;//当前的等值子串的起始位置与长度
while(str[++i]!='!')
{
if(str[i] == str[start])
len++;//对应字符串相等,等值子串长度增1
else
{
if(len > len_max)
{//当前等值子串最长
start_max=start;
len_max=len;
}
//设置下一个等值子串的起始位置及长度
start=i;len=1;
}
}
if(len > len_max)
{//当前等值子串最长,只有上面的while循环会漏掉字符串的最后一个子串
start_max=start;
len_max=len;
}
if(len_max < 2)
{
cout<<"无等值子串!"<<endl;return -1;
}
else
{//将最大等值子串复制到sub
for(i=0;i<len_max;i