user-0 提问: 如何使用流程编码压缩和解压字符串？

回复:
user: user-0
content: 引用 11 楼 赵4老师 的回复:不带1会出现逻辑混乱 嗯，没错。 谢谢指导

user: user-1
content: 不带1会出现逻辑混乱

user: user-0
content: 引用 9 楼 赵4老师 的回复:在数值1～9和字符'1'～'9'之间来回转换而已。谢谢老师，还有一个问题。如果我想实现压缩完毕为“sd4sweqw919121je929262”不计算只有一个字符的字符串，然后去解压。我原先预想的是压缩不带'1'的出来，解压的时候把'1'分别加回去再解压，这样系统好识别。后来发现很难实现bug多，有什么办法可以实现吗？

user: user-1
content: 在数值1～9和字符'1'～'9'之间来回转换而已。

user: user-0
content: 引用 7 楼 赵4老师 的回复:#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 // 方便问下这个rst[j++]='0'+count; 和 count=pst[i]-'0'; 是什么作用吗

user: user-0
content: 引用 5 楼 Sirius12138 的回复:引用 3 楼 赵4老师 的回复:超过9次，要拆成若干组。谢谢指点我去尝试一下 #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; }  我实现了这个压缩，但是解压如何将字符串两个分组识别并解压呢

user: user-1
content: #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 //

user: user-0
content: 引用 3 楼 赵4老师 的回复:超过9次，要拆成若干组。谢谢指点我去尝试一下

user: user-0
content: 引用 1 楼 user-2 的回复:你这样好像没压缩呀，保存的信息比原本要用的空间还多呢，你去看一下哈夫曼树，这是很常用的压缩信息的方式 那个对初学者来说似乎有点难了，如果不计一次的count的话，明面上还算压缩了吧 例如 为2a422b3we

user: user-1
content: 超过9次，要拆成若干组。

user: user-1
content: 两两一组，每组中第1个字符（1-9）表示重复次数，第2个字符表示要重复的字符。

user: user-2
content: 你这样好像没压缩呀，保存的信息比原本要用的空间还多呢，你去看一下哈夫曼树，这是很常用的压缩信息的方式