“std::out_of_range” при обращении к элементу строки

206
28 марта 2018, 05:35

Не хочет удалять элемент строки.

std::string reverseParentheses(std::string s) {
int obr = 0;
int l = s.size();
int cbr = s.find(")", 0, 1);
while (cbr != std::string::npos)
{
    obr = s.rfind("(", cbr, 1);
    std::reverse(s.begin() + obr + 1, s.end() - cbr + 1);
    s.erase(cbr,1);
    s.erase(obr,1);
    cbr = s.find(")", cbr, 1);
}
return s;
}

Задание: перевернуть все части строки, заключенные в скобках, начиная с самого нижнего уровня вложения, удалить сами скобки. Для строки "Code(Cha(lle)nge)" вывод должен быть "CodeegnlleahC". Меня интересует лишь то, почему обращение к строке неправильное выходит. Вот это:

std:: cout << obr << " " << cbr;
std:: cout << s[obr] << " " << s[cbr];

возвращает верный результат. Если делать типа такого:

s.erase(3,1);

Все нормально удаляется. В общем, помогите пожалуйста)

Answer 1

Все просто оказалось. Вместо s.erase(obr,1) поставил s.erase(s.begin()+obr), заработало. Реверс и впрямь тупит, но это не большая проблема.

READ ALSO
Проблема с рандомизацией

Проблема с рандомизацией

Пытаюсь заполнить такую табличку:

206
как преобразовать void (*Class::)() в void (*)()

как преобразовать void (*Class::)() в void (*)()

Дело в том, что я хочу в OpenGL в функцию glutDisplayFunc передать метод класса

212
Удаление элементов стека

Удаление элементов стека

Создать проект, демонстрирующий работу со стеком, организованным на основе спискаВсе операции со стеком реализовать через функции

226