terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::erase: __pos (which is 9) > this->size() (which is 8)
时间: 2024-04-16 18:25:50 浏览: 170
php-fpm超时时间设置request_terminate_timeout资源问题分析
根据您提供的错误信息,可以看出代码中出现了 `std::out_of_range` 异常,这是由于在 `s.erase(i)` 操作中,索引 `i` 超出了字符串 `s` 的范围导致的。
这个问题的原因在于当删除一个字符后,字符串的长度会减少,但是当前的索引 `i` 却继续递增,导致索引超出范围。
为了解决这个问题,你可以将循环的控制条件修改为 `while (i < s.size())`,这样每次循环都会动态地根据字符串的长度更新索引的范围。
下面是修改后的代码:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string s;
std::cin >> s;
std::string str;
bool op = true;
int i = 0;
while (i < s.size()) {
if (s[i] == ')') {
s.erase(i, 1);
op = true;
} else if (s[i] == '(') {
op = false;
s.erase(i, 1);
} else if (op == false) {
str += s[i];
s.erase(i, 1);
} else {
i++;
}
}
sort(str.begin(), str.end());
int len1 = str.size();
int len2 = s.size();
if (len1 == 0) {
std::cout << s << std::endl;
} else {
for (int i = 0; i < len2; i++) {
for (int j = 0; j < len1; j++) {
if (s[i] == str[j]) {
s[i] = str[j % len1];
}
}
}
std::cout << s << std::endl;
}
return 0;
}
```
希望这次可以解决问题并得到正确的输出结果。如果还有其他问题,请随时提问。
阅读全文