题目背景
在 GESP C++ 等级考试的初级阶段,字符串处理是考察重点之一。这道'数字替换'题看似简单,实则考察对输入输出及字符遍历的掌握程度。
问题分析
题目要求将整数中的所有数字 4 替换为 8。如果直接按整数类型处理,需要反复取模和除法来提取每一位,逻辑稍显繁琐且容易出错。更直观的做法是将输入视为字符串,因为数字在计算机中本质上就是字符序列。
采用字符串方式处理有几个好处:
- 无需担心数值溢出问题,即使数字很大也能处理。
- 替换操作可以直接通过字符比较完成,代码量更少。
- 输出时直接打印修改后的字符串,省去了格式转换步骤。
代码实现
下面给出完整的 C++ 解决方案。注意这里使用了引用遍历,这样修改 c 的值会直接反映在原字符串上。
#include <iostream>
#include <string>
using namespace std;
int main() {
// 优化 IO 效率,虽然本题数据量小,但养成习惯很好
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
if (cin >> s) {
// 遍历字符串中的每一个字符
for (char &c : s) {
if (c == '4') {
c = '8';
}
}
cout << s << endl;
}
return 0;
}
关键点说明
- 输入读取:使用
string接收输入,自动处理空格前的连续字符,符合题目'一行一个整数'的要求。 - 字符比较:注意
'4'和'8'是字符常量,不是数字 4 或 8。这是初学者容易混淆的地方。 - 范围考虑:题目给出的数据范围虽然显示有些混乱,但通常这类题目 A 的范围在 0 到 10^9 之间。字符串方法天然支持任意长度的数字串,完全覆盖该范围。
- 样例验证:
- 输入
8459045,遍历后变为8859085,符合预期。 - 输入
123,没有 4,保持不变,输出123。
- 输入


