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

C++实现将字符串中指定子串移动到最前端

### 🌟思路分析 本题的核心思路是在字符串 `s1` 中找出所有的子字符串 `s2`,将这些 `s2` 提取出来并移动到 `s1` 的最前端,同时移除 `s1` 中原来的 `s2` 部分。可以使用 `std::string` 的 `find` 方法来查找 `s2` 在 `s1` 中的位置,然后进行相应的字符串拼接和删除操作。 ### 💻代码实现 ```cpp #include <iostream> #include <string> std::string moveSubstringToFront(const std::string& s1, const std::string& s2) { std::string result; std::string remaining = s1; size_t pos = 0; // 找出所有的 s2 并添加到结果字符串的前面 while ((pos = remaining.find(s2)) != std::string::npos) { result += s2; remaining.erase(pos, s2.length()); } // 将剩余的部分添加到结果字符串的后面 result += remaining; return result; } int main() { std::string s1, s2; // 读取输入的字符串 s1 std::getline(std::cin, s1); // 读取输入的字符串 s2 std::getline(std::cin, s2); std::string newS1 = moveSubstringToFront(s1, s2); std::cout << newS1 << std::endl; return 0; } ``` ### 📝代码解释 1. **`moveSubstringToFront` 函数**: - `result` 用于存储最终的结果字符串。 - `remaining` 用于存储 `s1` 中还未处理的部分。 - 使用 `while` 循环和 `find` 方法找出 `s2` 在 `remaining` 中的位置。 - 每次找到 `s2` 后,将其添加到 `result` 中,并从 `remaining` 中删除。 - 最后将 `remaining` 中剩余的部分添加到 `result` 的后面。 2. **`main` 函数**: - 使用 `std::getline` 读取输入的字符串 `s1` 和 `s2`。 - 调用 `moveSubstringToFront` 函数处理字符串,并将结果存储在 `newS1` 中。 - 输出处理后的字符串 `newS1`。 ### ⚙️复杂度分析 - **时间复杂度**:$O(n * m)$,其中 $n$ 是 `s1` 的长度,$m$ 是 `s2` 的长度。因为每次调用 `find` 方法的时间复杂度是 $O(n)$,最多需要调用 $n/m$ 次。 - **空间复杂度**:$O(n)$,主要用于存储结果字符串。 ### 💡开发建议 - **边界情况处理**:在实际开发中,需要考虑 `s2` 为空字符串的情况,此时可以直接返回 `s1`。 - **性能优化**:如果 `s1` 和 `s2` 的长度非常大,可以考虑使用更高效的字符串匹配算法,如 KMP 算法,来提高查找效率。 ######[AI写代码神器 | 775点数解答 | 2026-07-03 21:13:44]

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