Я пытаюсь изменить пользовательский ввод в форме подстановки ("*word*")
в формат регулярных выражений. С этой целью я использую ниже код, чтобы сдирать '*'
в начале и в конце строки, так что я могу добавить символы регулярных выражений на обоих концах:std :: string стереть последний символ не удается?
string::iterator iter_begin = expressionBuilder.begin();
string::iterator iter_end = expressionBuilder.end();
iter_end--;
if ((char)*iter_begin == '*' && (char)*iter_end == '*')
{
expressionBuilder.erase(iter_begin);
expressionBuilder.erase(iter_end);
expressionBuilder = "\\b\\w*" + expressionBuilder + "\\w*\\b";
}
Однако вызов "expressionBuilder.erase(iter_end)"
не стереть конечный '*'
из входной строки, поэтому я завершаю неправильное регулярное выражение. Что я здесь делаю неправильно? "(char)*iter_end == '*'"
должен быть правдой для кода внутри исполняемого файла if (что он делает), так почему же не работает тот же самый итератор при передаче для удаления()?
К счастью, со строками, вам не нужно использовать итераторы, большинство функций имеют форму, которая принимает индекс вместо этого. Тем не менее, как вы говорите, даже с индексированным стиранием все равно нужно сделать «назад к фронту». – 2008-10-23 19:50:48
P4tXrx5jrMlbhyludk9pxHBT30kGHo9n: вы правы в end(), но там есть iter_end--, который смотрит на фактический последний символ строки. – 2008-10-23 19:54:03
Это имеет смысл, и реверсирование заказа действительно решило проблему. Благодаря! – jeffm 2008-10-23 19:56:31