字符数组最长最短平台(C语言)

mac2024-07-20  59

字符数组最长最短平台

已知字符数组中的元素为 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; }
调试结果:

最新回复(0)