#include<iostream.h>
#include<malloc.h>
#include<stdio.h>
#define MAXLEN 50
int max=1,place=1; //全局变量max存放重复的最大次数,place用来指定位置的
typedef struct //字符串的定义
{
char a[MAXLEN];
int len;
}SString;
typedef struct node //单链表结点的定义
{
char m; //存放莫数值的
int num; //存放该数值出现的次数
node *next;
}LinkList;
main()
{
SString *S;
S=(SString *)malloc(sizeof(LinkList));//声明建立一个字符串,且S指向它
int i=1,j=0; //i,j是下面循环的计数器
char ch; //ch用来存放读入的数值
LinkList *T,*r,*p; //单链表的结点:T是指向头结点的;r始终指向最后一个结点;p是指向新建的结点
cout<<"请输入字符串,以@未结束符,最多0个字符:"<<endl;
ch=getchar();
for(S->len=1;ch!='@';S->len++) //一个for循环将字符串存入
{
S->a[S->len]=ch;
ch=getchar();
}
S->len=S->len-1; //确认len的个数
T=r=(LinkList *)malloc(sizeof(LinkList));//新建单链表的头结点
T->next=NULL;
p=(LinkList *)malloc(sizeof(LinkList));//建立第一个结点
p->m=S->a[1]; //读入字符串第一个数值
p->num=1; //将个数记为一
r->next=p;
r=p; //r指向暂时的最后一个结点
for(i=1;i<S->len;i++) //循环len次将字符串扫描一遍
{
if(S->a[i]==S->a[i+1]) //判断现在的数值与它后一个数值是否相等
{
r->num=r->num+1; //相等则num加一个
if(max<r->num) //确定max的值,即重复次数的最大值
max=max+1;
}
else
{
r->next=NULL; //前一个链表结束
p=(LinkList *)malloc(sizeof(LinkList));//再新建一个链表
p->m=S->a[i+1]; //存放不同数值的值
p->num=1; //该数值个数先记为1
r->next=p;
r=p;
}
}
r->next=NULL; //链表建立结束
while(T->next!=NULL)
{
if(T->next->num==max) //扫描所有元素个数与max相等的结点
{
for(j=0;j<max;j++)
cout<<T->next->m;
cout<<"位置在第"<<place<<endl;
place=place+T->next->num; //计算下一个结点第一字符出现在第几个
T=T->next; //指针向后移一个
}
else
{
place=place+T->next->num;
T=T->next;
}
}
}