Problem 编程实现对一个只包含大写字母的字符串进行压缩和解压缩。 压缩规则是:假设某连续出现的同一字母的数量为n,则其在压缩字符串中为字母n。若n=1,则n必须省略,例如,AAAABCCCCCDDDD压缩为A4BC5D4。 解压缩规则是将压缩字符串还原,例如,A4BC5D4解压为AAAABCCCCCDDDD。 输入、处理结果中的每个字符串的长度都不会超过99。 字符串库函数可用列表: strlen() 注意:禁用STL。 input: 第一行:数字1或者2,前者代表进行压缩,后者代表进行解压。 第二行:一个符合对应要求的字符串。 output: 处理后的结果。 Samples: input: 1 AAAABCCCCCDDDD output: A4BC5D4 input: 2 A4BC5D4 output: AAAABCCCCCDDDD
3条回答 默认 最新
关注 #include<stdio.h> #include <cstring> #define LENGTH 2000 char a[LENGTH]; void compress_string() { int i,n=1,l,j; l=strlen(a); for(i=0;i<l;i++){ if(a[i]==a[i+1]){ n++; //printf("%d\n", i); } else{ if(n>1) printf("%c%d", a[i],n); else printf("%c", a[i]); //printf("%d\n", i); n=1; } } } void jieya_string() { int i,n,l,j; l=strlen(a); for(i=0;i<l;i++){ if(a[i]>='0'&&a[i]<='9'){ n=a[i]-'0'; for(j=0;j<n-1;j++){ printf("%c", a[i-1]); } } else printf("%c", a[i]); } } int main(void) { int i,t=0; scanf("%d", &t); scanf("%s", a); if(t==2) jieya_string(); else compress_string(); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1
悬赏问题
- ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
- ¥15 vscode程序一直报同样的错,如何解决?
- ¥15 关于使用unity中遇到的问题
- ¥15 开放世界如何写线性关卡的用例(类似原神)
- ¥15 关于并联谐振电磁感应加热
- ¥15 this signal is connected to multiple drivers怎么解决
- ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
- ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
- ¥66 如何制作支付宝扫码跳转到发红包界面
- ¥15 pnpm 下载element-plus