solution.md 1.8 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
# 解码

**问题描述**

小明有一串很长的英文字母,可能包含大写和小写。在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。

例如,连续的 5 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4a、aa3a 等)。对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表达,小明不会将连续的超过 9 个相同的字符写成简写的形式。
现在给出简写后的字符串,请帮助小明还原成原来的串。

**输入格式**

输入一行包含一个字符串。

**输出格式**

输出一个字符串,表示还原后的串。

**样例输入**

```
H3el5o2
```

**样例输出**

```
HHHellllloo
```

**评测用例规模与约定**

对于所有评测用例,字符串由大小写英文字母和数字组成,长度不超过100。

请注意原来的串长度可能超过 100。

以下程序实现了这一功能,请你填补空白处内容:

```cpp
#include <bits/stdc++.h>
using namespace std;

char s2[100000];
int main()
{
    char s1[150];
    cin >> s1;

    int top = 0;
    for (int i = 0; s1[i] != '\0'; i++)
    {
        if ((s1[i] >= 'A' && s1[i] <= 'Z') || (s1[i] >= 'a' && s1[i] <= 'z'))
        {
            s2[top++] = s1[i];
        }
        else
        {
            while (s1[i] != '1')
            {
                __________________
                s1[i] = s1[i] - 1;
            }
        }
    }
    s2[top] = '\0';

    cout << s2;
    return 0;
}
```

## aop

### before

```cpp

```

### after

```cpp

```

## 答案

```cpp
s2[top++] = s1[i - 1];
```

## 选项

### A

```cpp
s2[++top] = s1[i - 1];
```

### B

```cpp
s2[++top] = s1[i + 1];
```

### C

```cpp
s2[top++] = s1[i + 1];
```