利用串的基本运算,编写一个算法删除串S1中所有的S2子串。 要求如下: 1、示例:S1=‘abcabc’,S2=‘ab’,执行后S1=‘cc’ 2、S2不能是空串 3、若S2不是S1的子串,需提示错误信息 用C++ 单指针 写
时间: 2024-10-10 22:13:34 浏览: 18
你可以使用C++的单指针(single pointer)方法结合循环来解决这个问题。首先,我们需要两个指针,一个指向S1的起始位置(start),另一个指向S2的起始位置(matchStart)。算法的主要步骤如下:
```cpp
#include <string>
using namespace std;
void deleteSubString(string& S1, string S2) {
if (S2.empty()) {
// 错误处理:S2不能是空串
throw invalid_argument("Error: Substring S2 cannot be empty.");
}
int i = 0; // S1当前索引
for (i = 0; i <= S1.length() - S2.length(); i++) { // 遍历S1,寻找S2的位置
if (S1.substr(i, S2.length()) == S2) { // 如果找到匹配的子串
S1.erase(i, S2.length()); // 删除子串
i -= S2.length(); // 更新搜索起点,跳过已删除的部分
}
}
if (i < S1.length()) { // 检查是否还有剩余部分
cout << "Substring " << S2 << " not found in S1." << endl;
}
}
// 示例
int main() {
string S1 = "abcabc";
string S2 = "ab";
try {
deleteSubString(S1, S2);
cout << "After deletion: " << S1 << endl;
} catch (invalid_argument &e) {
cerr << e.what() << endl;
}
return 0;
}
```
运行上述代码,如果S2是S1的子串,则会删除所有出现的位置;如果不是,则会输出错误消息。
阅读全文