☰
C语言/数据结构字符串题解:解压缩“字符+次数“格式——多位数字处理与字符串还原
2026/10/15 2:54:37 网站建设 项目流程

问题描述

小明在整理历史文献时发现了一种古老的压缩字符串,其规则如下:将连续重复的字符用"字符+出现次数"的形式表示。例如,"aaabb"会被压缩成"a3b2"。现在小明需要编写一个解压缩程序,将这种格式的字符串恢复成原始形式。

要求:

  1. 设计一个算法处理输入字符串,输出解压后的完整字符串
  2. 保证输入字符串格式正确,且解压后的字符串长度不超过1000个字符
  3. 注意处理多位数字的情况,如"a12"表示12个连续的'a'

测试样例

样例1:

输入:"a3b2c1"输出:"aaabbc"解释:a出现3次(即"aaa"),b出现2次(即"bb"),c出现1次(即"c"),所以解压后为"aaabbc"

样例2:

输入:"x1y5z2"输出:"xyyyyyzz"解释:x出现1次(即"x"),y出现5次(即"yyyyy"),z出现2次(即"zz"),所以解压后为"xyyyyyzz"

样例3:

输入:"w2e10f3"输出:"wweeeeeeeeeefff"解释:w出现2次(即"ww"),e出现10次(即"eeeeeeeeee"),f出现3次(即"fff"),所以解压后为"wweeeeeeeeeefff"。注意这里e10表示10个e,展示了多位数字的处理。

约束条件

  • 输入字符串长度在1到100之间
  • 字符均为小写英文字母(a-z)
  • 出现次数为1到1000的正整数
  • 解压后的字符串长度不超过1000个字符
  • 输入格式保证正确,总是"字符+数字"交替出现

程序代码

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char* decompress(char* s) {

int n = strlen(s);

char* result = (char*)malloc(1001 * sizeof(char)); // 最大1000字符

int idx = 0;

int i = 0;

while (i < n) {

// 读取字符

char ch = s[i++];

// 读取数字(可能多位)

int count = 0;

while (i < n && s[i] >= '0' && s[i] <= '9') {

count = count * 10 + (s[i] - '0');

i++;

}

// 重复字符 count 次

for (int j = 0; j < count; j++) {

result[idx++] = ch;

}

}

result[idx] = '\0';

return result;

}

int main() {

char* r1 = decompress("a3b2c1");

char* r2 = decompress("x1y5z2");

char* r3 = decompress("w2e10f3");

printf("%s\n", r1); // aaabbc

printf("%s\n", r2); // xyyyyyzz

printf("%s\n", r3); // wweeeeeeeeeefff

free(r1);

free(r2);

free(r3);

return 0;

}

#include <stdio.h> #include <stdlib.h> #include <string.h> char* decompress(char* s) { int n = strlen(s); char* result = (char*)malloc(1001 * sizeof(char)); // 最大1000字符 int idx = 0; int i = 0; while (i < n) { // 读取字符 char ch = s[i++]; // 读取数字(可能多位) int count = 0; while (i < n && s[i] >= '0' && s[i] <= '9') { count = count * 10 + (s[i] - '0'); i++; } // 重复字符 count 次 for (int j = 0; j < count; j++) { result[idx++] = ch; } } result[idx] = '\0'; return result; } int main() { char* r1 = decompress("a3b2c1"); char* r2 = decompress("x1y5z2"); char* r3 = decompress("w2e10f3"); printf("%s\n", r1); // aaabbc printf("%s\n", r2); // xyyyyyzz printf("%s\n", r3); // wweeeeeeeeeefff free(r1); free(r2); free(r3); return 0; }

运行结果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询