69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
void EncodeString(char* str)
{
int count =1;
for(int i=0;i<strlen(str);i++)
{
if(str[i] == str[i+1])
{
++count;
}
else
{
if( count==1)
{
printf("%c",str[i]);
}
else if (count > 9)
{
while (1)
{
printf("9%c",str[i]);
count = count -9;
if (count < 9)
{
printf("%d%c",count,str[i]);
break;
}
}
count =1;
}
else
{
printf("%d%c",count,str[i]);
count=1;
}
}
}
printf("\n");
}
int main()
{
char str[] = "sdssssweqw11111111111111111111je222222222222222222222222";
EncodeString(str);
return 0;
}
我实现了这个压缩,但是解压如何将字符串两个分组识别并解压呢#pragma warning(disable:4996) //开头加这句或项目、属性、配置属性、C/C++、预处理器、预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”
#include <stdio.h>
#include <string.h>
#define MAXLEN 100
char *EncodeString(char* str) {
static char rst[MAXLEN];
int i,j=0;
int count=1;
for (i=0;i<(int)strlen(str)+1;i++) {
if(str[i] == str[i+1]) {
++count;
} else {
while (count>=9) {
rst[j++]='9';
rst[j++]=str[i];
count -= 9;
}
if (count>0) {
rst[j++]='0'+count;
rst[j++]=str[i];
}
count=1;
}
}
return rst;
}
char *DecodeString(char* pst) {
static char rst[MAXLEN];
int i,j=0,k;
int count;
for (i=0;i<(int)strlen(pst);i+=2) {
count=pst[i]-'0';
for (k=0;k<count;k++) {
rst[j++]=pst[i+1];
}
}
rst[j]=0;
return rst;
}
int main() {
char str[MAXLEN+1] = "sdssssweqw11111111111111111111je222222222222222222222222";
char pst[MAXLEN+1];
char ust[MAXLEN+1];
printf("%s\n",str);
strncpy(pst,EncodeString(str),MAXLEN); pst[MAXLEN]=0;
printf("%s\n",pst);
strncpy(ust,DecodeString(pst),MAXLEN); ust[MAXLEN]=0;
printf("%s\n",ust);
return 0;
}
//sdssssweqw11111111111111111111je222222222222222222222222
//1s1d4s1w1e1q1w9191211j1e929262
//sdssssweqw11111111111111111111je222222222222222222222222
//
超过9次,要拆成若干组。
你这样好像没压缩呀,保存的信息比原本要用的空间还多呢,你去看一下哈夫曼树,这是很常用的压缩信息的方式