字符数组最长最短平台
已知字符数组中的元素为 asssad333233 称a、sss、a、d、333、2、33 为字符数组的平台,其中 sss 、333 为字符数组的最长平台,a、d、2 为数组的最短平台,33为长度为2的平台。
算法设计
1.存储结构:结构体数组(可以存入相邻不同字符元素并统计其顺序出现的个数)。
eg:asssad333233,存储为a1,s3,a1,d1,33,21,32。
2.代码设计:
(1)比较数组中元素是否相等,如果相等,则让标记次数加一,存入结构体中(字符数据不存入结构体中。
(2)如果不相等,则将下一个元素(不相等的元素)存入下一个结构体的数据域中,标号置一,判断下一个元素。
源代码:
#include<stdio.h>
#define MAX 100
char a[MAX];
//结构体数组
typedef struct {
char data;
int count;
}DC;
void input_array(char array[])
{
printf("Input elements:");
fflush(stdout);
for(int i=0;array[i]!='#';i++)
{
scanf("%c",&array[i]);
if(array[i]=='#')
break;
}
}
int array_length(char array[]){
int j;
for(int i=0;array[i]!='#';i++)
j=i;
return j;
}
void print_array(char array[])
{
printf("test");
fflush(stdout);
for(int i=0;array[i]!='#';i++)
{
printf("%c ",array[i]);
}
}
void long_string(char array[],int length, DC AG[]){
int j=0;//array
int l=0;
int cou=1;
AG[0].data=array[0];//处理第0个元素
for( j=0;j<length;j++)
{
if(array[j+1]==array[j]){
++cou;
//printf("test1%d,%d",cou,AG[l].count);
AG[l].count=cou;
}
if(array[j]!=array[j+1])
{
AG[l].count=cou;//1
l++;
cou=1;
AG[l].data=array[j+1];//array 的第1个元素
//printf("test2");
AG[l].count=cou;
}
}
}
int main(void)
{
input_array(a);
printf("length is %d\n",array_length(a));
int l=array_length(a);
DC aiguo[l];
long_string(a,l,aiguo);
for(int i =0;i<l;i++)
printf("%c %d\n",aiguo[i].data,aiguo[i].count);
return 0;
}