标题:字符串压缩
问题描述:有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。
请设计一个程序,采用该压缩方法对字符串压缩并输出。请编写一个函数compress,采用该压缩方法对字符串src进行压缩。函数定义如下:
char *compress(char *src);
返回值:
指向压缩后的字符串数据
参数:
src:输入/输出参数,输入表示待压缩字符串,输出表示压缩后的字符串
注意:函数声明已包含在主程序中,不需要自己定义。只需要提交自定义的函数代码。
主程序如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *compress(char*src);
int main()
{
char src[100];
scanf("%s",src);
char *ps = compress(src);
puts(ps);
return 0;
}
主函数输入说明:
输入第一行为源字符串src(长度小于100),该字符串只包含大小写字母。
主函数输出说明:
输出一个数据,表示压缩后的字符串。
主函数输入样例:
aaaaabbbabaaaaaaaaaaaaabbbb
主函数输出样例:
a5b3aba13b4
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *compress(char *src);
int main()
{
char src[100];
scanf("%s",src);
char *ps = compress(src);
puts(ps);
return 0;
}
char *compress(char *src){
int i=0,t=0,n=0;
int ten;
char ji;
int oldstr=strlen(src);
int sum=0;//计录新字符串长度
static char newsrc[100]={0};//设置静态变量
int num=0;
char py=src[0];
for(i=0;i<oldstr;i++){
if(src[i]==py){
num++;
}
ji=src[i];
newsrc[t]=ji;
sum++;
if(num>2){
if(src[i]!=src[i+1]||src[i+1]=='0'){
n=t;
if(num<10){
newsrc[t-num+2]=num+48;//令连续字母的第2为成为记录的数字
sum=sum-num+2; //新字符串的长度减去重复个数加上数字
t=t-num+2;
}
else {
ten=num/10;//考虑连续字符个数大于10小于100
newsrc[t-num+2]=ten+48;
newsrc[t-num+3]=num-ten*10+48;
sum=sum-num+3; //新字符串的长度减去重复个数加上数字
t=t-num+3;
}
}
}
t++;
py=src[i];
if(src[i]!=src[i+1]) num=1;
}
newsrc[sum]='\0';
return newsrc;
}
第一次发布,如有问题或更好的方法,欢迎在评论里指出。
//找不到例子苦想一下午
😭