《编程思维与实践》1044.数据压缩
题目
思路
用一个结构体存每个字符和其对应的连续出现次数(不超过255),遍历字符串判断后一个字符与前一个字符是否相同即可.
代码
#include<stdio.h>
#include<string.h>
typedef struct{int count;char a;}Data; //字符和对应的个数
int main()
{
int T;
scanf("%d",&T);
for(int i=0;i<T;i++)
{
char s[501];
scanf("%s",s);
Data tab[500]; //最多500个字符
for(int j=0;j<500;j++)
{
tab[j].count=0;
}
int k=0;
for(int j=0;j<strlen(s);j++)
{
tab[k].a=s[j];
tab[k].count++;
while(s[j+1]==s[j]) //后一个与前一个比较
{
tab[k].count++;
j++;
if(tab[k].count==255) //不超过255
{
break;
}
}
k++;
}
printf("case #%d:\n",i);
for(int j=0;j<500;j++)
{
if(tab[j].count!=0)
{
printf("%d%c",tab[j].count,tab[j].a); //出现次数+对应字符
}
}
printf("\n");
}
return 0;
}