最大字符平台【C语言】
__对于一个顺序串S,输出其最大字符平台的起始位置及所包含的字符。
注意:最大字符平台有可能不止一个。
例如:
字符串:aabcbbbbdccccaaa
其最大字符平台为:bbbb、cccc
__
#include <stdio.h>
#include <stdlib.h>
#define size 100
int a[size];
int b[size];
int t=0;
typedef struct
{
char ch[size];
int len;
}Seqstring;
void create(Seqstring *s)
{
int i;
for(i=0;i<s->len;i++)
{
scanf(" %c",&s->ch[i]);
}
}
void char_platform(Seqstring *s)
{
int i=0;
a[t]=1;
b[t]=1;
while(1)
{
b[t]=1;
while(s->ch[i]==s->ch[i+1])
{
b[t]=b[t]+1;
i++;
}
int ans=a[t]+b[t];
if(ans > s->len)
{
return;
}
else if(ans <= s->len)
{
a[t+1]=a[t]+b[t];
t++;
i++;
};
}
}
int MAX(int a,int b)
{
return a>b?a:b;
}
void view_platform(Seqstring *s)
{
int i=0;
int maxn=0;
while(i<=t)
{
maxn=MAX(b[i],maxn);
i++;
}
int temp=0;
while(temp<=t)
{
if(b[temp]==maxn)
{
int j=0;
while(j<maxn)
{
printf("%c",s->ch[a[temp]-1]);
j++;
}
printf("\n");
}
temp++;
}
}
void view(Seqstring *s)
{
printf("该顺序串的长度为:%d\n",s->len);
printf("该顺序串为:");
if(s->len==0)
{
printf("NULL");
return;
}
int i;
for(i=0;i<s->len;i++)
{
printf("%c",s->ch[i]);
}
printf("\n");
}
int main()
{
printf("请您输入--顺序串的长度:\n");
int num;
scanf("%d",&num);
Seqstring s;
s.len=num;
printf("请您输入--顺序串:\n");
create(&s);
view(&s);
char_platform(&s);
printf("该顺序串的字符平台为:\n");
view_platform(&s);
return 0;
}
请您输入--顺序串的长度:
16
请您输入--顺序串:
aabcbbbbdccccaaa
该顺序串的长度为:16
该顺序串为:aabcbbbbdccccaaa
该顺序串的字符平台为:
bbbb
cccc
Program ended with exit code: 0
Copyright © 2019 wyq. All rights reserved. |
---|