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

字符数组最长最短平台

已知字符数组中的元素为 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;

}
调试结果:

调试结果

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值