求一个字符串中相同的连续中最长的部分,用c语言
发布网友
发布时间:2022-04-24 07:25
我来回答
共4个回答
热心网友
时间:2022-06-17 14:21
#include "stdio.h"
//返回最大的重复次数 及其起始地址和起始序号 次数和序号以0为起始
int maxRepeated(char* buf, char* *p, int *state)//input:buf output: p,state
{
int imax=0,i=0,j=0;
char *p0,*plast;
p0 = plast = buf;
while(*p0)//<<是否到尾了
{
if(*p0 == *(p0+1))//<<相邻两元素是否重复
i++;
else
{
if(i>imax)
{
imax = i;
*p = plast;
*state = j-i;
}
i = 0;
plast = p0+1;//<<新起始位置是下一元素
}
p0++;//<<移到下一元素
j++;
}
return imax;
}
void main()
{
char buf[1024], *p;
int n,m;
printf("找出最大的重复并输出,请输入测试数据;\n");
while(strlen(gets(buf))>1)//输入空行则结束
{
n=maxRepeated(buf,&p,&m);
if(!n)
printf("没有重复的内容!\n");
else
{
for(int i=0; i<=n; i++) printf("%c",p[i]);
printf(" 最大重复次数:%d, 起始于第%d个.\n",n+1,m+1);//输出时 次数和下标都换成以1为起始了
}
}
}
////////////就具体问题来说,此答算法不如楼上的简洁,仅仅是通用性上好一点,方便改造处理类似的问题
//挑灯夜读任务中, 用心回答每一个... 还要回答19个
热心网友
时间:2022-06-17 14:21
int main()
{
char s[]="1112222345",maxc;
int n,sum,i,j,sn=1;
int maxn=0;
n=strlen(s);
for(i=0;i<n-1;i++)
{
for(j=i;j<n-1;j++)
if(s[j]==s[j+1]) sn++;
else break;
if(sn>maxn)
{
maxn=sn;
maxc=s[j];
}
sn=1 ;
}
for(i=0;i<maxn;i++)
printf("%c",maxc);
system("pause");
return 0;
}
热心网友
时间:2022-06-17 14:22
www.baidu.com
热心网友
时间:2022-06-17 14:22
楼上写的好简洁,思路清晰.
比我想的用指针的简洁多了.学习了