Estoy tratando de cambiar la entrada del usuario en forma de comodín ("*word*")
a un formato de expresión regular. A tal fin, estoy usando el siguiente código para quitarse el '*'
al principio y al final de la entrada para que yo pueda añadir los caracteres de expresiones regulares en cada extremo:std :: string ¿se borra el último carácter?
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";
}
Sin embargo, la llamada a "expressionBuilder.erase(iter_end)"
¿no borran el '*'
de la cadena de entrada por lo que termino con una expresión regular incorrecta. ¿Qué estoy haciendo mal aquí? "(char)*iter_end == '*'"
debe ser verdadero para el código dentro de la sentencia if para ejecutarse (lo que hace), entonces ¿por qué no funciona el mismo iterador cuando se pasa a borrar()?
suerte con las cadenas que no es necesario usar iteradores, la mayoría de las funciones tienen una forma que tiene un índice en su lugar. Aún así, como dices, incluso con el borrado indexado debería hacerse "de atrás hacia adelante". –
P4tXrx5jrMlbhyludk9pxHBT30kGHo9n: tienes razón sobre end(), pero hay un iter_end-- ahí que mira el último carácter real de la cadena. –
Esto tiene mucho sentido, y revertir el orden solucionó el problema. ¡Gracias! – jeffm