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);
Все нормально удаляется. В общем, помогите пожалуйста)
Все просто оказалось. Вместо s.erase(obr,1) поставил s.erase(s.begin()+obr), заработало. Реверс и впрямь тупит, но это не большая проблема.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости