C++ 字符串子串替换实现及开发注意要点
好的,这是一个典型的字符串替换问题。我们来一步步分析并实现它。 ## 🔧 问题分析 我们有两个字符串 `s` 和 `t`,且保证: - `t` 是 `s` 的子串 - `t` 在 `s` 中仅出现一次 要求:将 `s` 中的 `t` 替换为 `***` 并输出。 ## ✅ 实现思路 1. **定位子串位置**:在 `s` 中查找 `t` 第一次(也是唯一一次)出现的位置。 2. **字符串拼接**:将 `s` 分为三部分:`t` 之前的部分 + `***` + `t` 之后的部分。 3. **输出结果**。 ## 📦 C++ 代码实现 | 函数 / 方法 | 用途 | |-------------|------| | `std::string::find()` | 查找子串首次出现的位置 | | `std::string::substr()` | 提取子串 | ```cpp #include <iostream> #include <string> int main() { std::string s, t; // 读入整行,因为在输入中可能包含空格前后的字符串 // 由于两个字符串由空格分隔,直接用 cin 即可 std::cin >> s >> t; // 查找子串 t 在 s 中的位置 size_t pos = s.find(t); if (pos != std::string::npos) { // 替换操作:保留 pos 之前的部分,拼接 "***",再拼接 pos + t.length() 之后的部分 std::string result = s.substr(0, pos) + "***" + s.substr(pos + t.length()); std::cout << result << std::endl; } else { // 根据题意,这种情况不会发生,但为健壮性保留 std::cout << s << std::endl; } return 0; } ``` ## ⚠️ 开发建议与注意事项 1. **输入处理**:如果字符串本身可能包含空格(例如 `s` 或 `t` 由单词组成),建议使用 `getline(cin, s)` 等更灵活的方式,但本题输入格式已定,直接用 `cin >>` 即可。 2. **边界情况**:如果 `t` 出现在 `s` 的开头或末尾,`substr` 的两个调用依然能正确处理(`substr(0,0)` 返回空串,`substr(pos + len)` 当 `pos + len == s.length()` 时也返回空串)。 3. **性能**:`find` 的时间复杂度为 O(n*m)(朴素匹配),对于一般竞赛或面试场景足够。如果字符串极长,可考虑 KMP 算法优化,但本题不必要。 4. **错误处理**:尽管题目保证 `t` 一定出现且仅一次,实际开发中应始终处理 `find` 返回 `npos` 的情况。 ## 🧪 测试样例 **输入:** ``` huanyingxiaohetao xiaohetao ``` **输出:** ``` huanying*** ``` **输入:** ``` hello ll ``` **输出:** ``` he***o ``` ## 📚 相关知识扩展 - **C++ 字符串查找**:`find` 是 `std::string` 的成员函数,另有 `rfind`(从右向左找)、`find_first_of`、`find_last_of` 等。 - **字符串替换**:C++ 标准库没有直接的 `replace_all` 函数,通常自行实现或使用 `std::regex`(但会引入额外开销)。 - **安全提示**:在多线程环境下,如果 `s` 或 `t` 是可变共享数据,需加锁或使用不可变副本。 ######[AI写代码神器 | 852点数解答 | 2026-07-03 19:04:24]
- 3414 数字游戏:Python 求解 8 位 01 字符串中 1 的个数 (字节豆包 | 106点数解答 | 2024-10-27 14:23:27)471
- 巧用字符添加,计算字符串中“our”最大数量及开发注意要点(DeepSeek | 376点数解答 | 2025-10-30 19:20:06)125
- C 语言实现:处理字符串生成最多 “our” 串,附代码及关键开发注意点 (DeepSeek | 257点数解答 | 2025-10-30 19:20:36)179
- C++ 求解:最少操作次数让字符串无子串 “friend” (字节豆包 | 153点数解答 | 2024-08-17 16:29:54)522
- C++ 求解:最少操作次数让字符串不再含 “friend” 子串!(讯飞星火 | 260点数解答 | 2024-08-17 16:30:49)513
- Python 巧解:最少操作次数让字符串告别“friend”子串(字节豆包 | 139点数解答 | 2024-08-18 13:04:14)449
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)262
- Python 实现列字符串替换:将 \t 换为空格及处理注意要点(字节豆包 | 127点数解答 | 2025-03-14 17:29:22)205
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)502
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)425
- Java实现Student类:含构造、方法及年龄判定(字节豆包 | 464点数解答 | 2024-11-19 15:55:26)428
- Python 实现多功能手机通讯录:添加、查看、删除、修改、查找全搞定!(字节豆包 | 1030点数解答 | 2025-06-05 15:47:56)288