酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++数字字符串循环位移(+1)实现与注意事项

好的,这是一个典型的字符串字符映射转换问题。根据你的要求,我会用 **C++** 实现。 ## 💡 问题分析 我们需要将一个由数字字符组成的字符串,每个数字都 `+1`,并且要考虑边界情况 `9` 变成 `0`。本质上是一个 `(原数字 + 1) % 10` 的运算。 你提供的提示公式很精妙: ```cpp s[i] = (s[i] - '0' + 1) % 10 + '0'; ``` 关键步骤分解: 1. `s[i] - '0'` → 将字符数字转为整型数字 (如 `'3' -> 3`) 2. `+ 1` → 加1 3. `% 10` → 对 10 取模,使得 `9 + 1 = 10` 变为 `0` 4. `+ '0'` → 再转回数字字符 ## 🧩 完整代码实现 ```cpp #include <iostream> #include <string> using namespace std; int main() { string s; cin >> s; // 读入数字字符串 for (int i = 0; i < s.size(); i++) { // 每个字符循环移位 s[i] = (s[i] - '0' + 1) % 10 + '0'; } cout << s << endl; // 输出结果 return 0; } ``` ## ✅ 代码说明 | 部分 | 说明 | |------|------| | `cin >> s` | 读取输入的一行数字字符串,不含空格 | | `s.size()` | 获取字符串长度 | | `s[i] - '0'` | 将字符 `'0'~'9'` 转为整数 `0~9` | | `% 10` | 处理 `9 -> 0` 的循环 | | `+ '0'` | 再转回字符 | | `cout << s` | 输出修改后的字符串 | ## ⚠️ 开发建议与常见陷阱 1. **不要直接用 ASCII 值+1**:例如 `'9' + 1` 会变成 `':'`(ASCII 58),不是 `'0'`。所以务必使用取模运算。 2. **注意输入可能有换行问题**:`cin >> s` 会忽略空格和换行,只读取连续的数字串。如果题目要求读取整行含空格的,则应使用 `getline(cin, s)`。 3. **边界测试**:建议测试极端情况: - 输入 `"0"` → 输出 `"1"` - 输入 `"9"` → 输出 `"0"` - 输入 `"000"` → 输出 `"111"` - 输入 `"999"` → 输出 `"000"` 4. **代码可扩展性**:如果题目改为“向后移动 k 位”,只需要将公式中的 `+1` 改为 `+k`,并仍使用 `% 10` 即可。 ## 🧪 运行示例 **输入**: ``` 789 ``` **处理过程**: - `'7'` -> (7+1)%10=8 -> `'8'` - `'8'` -> (8+1)%10=9 -> `'9'` - `'9'` -> (9+1)%10=0 -> `'0'` **输出**: ``` 890 ``` ######[AI写代码神器 | 786点数解答 | 2026-06-21 20:04:22]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]