字符数组最长最短平台
已知字符数组中的元素为 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;
int l
=0;
int cou
=1;
AG
[0].data
=array
[0];
for( j
=0;j
<length
;j
++)
{
if(array
[j
+1]==array
[j
]){
++cou
;
AG
[l
].count
=cou
;
}
if(array
[j
]!=array
[j
+1])
{
AG
[l
].count
=cou
;
l
++;
cou
=1;
AG
[l
].data
=array
[j
+1];
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;
}
调试结果: