1. 题目背景与需求分析
GESP(青少年编程能力等级考试)作为国内权威的编程能力认证体系,其一级考试主要面向编程初学者。2026年3月考试中的"数字替换"题目,考察了考生对基础编程逻辑和字符串处理的能力。这道题在当次考试中引起广泛讨论,不少考生反映其看似简单实则暗藏玄机。
题目核心要求:给定一个数字字符串,将其中的每个数字d替换为d+1的值(若d为9则替换为0)。例如:
- 输入"123" → 输出"234"
- 输入"9012" → 输出"0123"
- 输入"789" → 输出"890"
2. 解题思路与算法设计
2.1 基础解法分析
最直观的解法是遍历字符串的每个字符:
- 检查当前字符是否为数字('0'-'9')
- 如果是数字则进行转换:
- 非'9'数字:ASCII码值+1
- '9'字符:替换为'0'
- 将处理后的字符存入结果
这种解法时间复杂度为O(n),空间复杂度O(n)(需要存储结果字符串),完全满足一级考试的要求。
2.2 边界情况考虑
实际编程时需要特别注意:
- 空字符串输入的处理
- 字符串中包含非数字字符的情况(根据题意通常假设输入合法)
- 字符串长度为最大值时的内存分配
- 连续多个'9'的替换情况
3. C++实现详解
3.1 完整代码实现
cpp复制#include <iostream>
#include <string>
using namespace std;
string replaceDigits(string s) {
for (char &c : s) {
if (c >= '0' && c <= '9') {
if (c == '9') c = '0';
else c += 1;
}
}
return s;
}
int main() {
string input;
cin >> input;
cout << replaceDigits(input) << endl;
return 0;
}
3.2 关键代码解析
- 范围循环:`for (char &c : s
