J'essaye de changer l'entrée d'utilisateur dans la forme générique ("*word*")
dans un format d'expression régulière. À cette fin, je suis en utilisant le code ci-dessous pour dépouiller l''*'
au début et à la fin de l'entrée afin que je puisse ajouter les caractères d'expression régulière à chaque extrémité:std :: string effacer le dernier caractère échoue?
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";
}
Cependant, l'appel à "expressionBuilder.erase(iter_end)"
pas effacer le '*'
à la fin de la chaîne d'entrée de sorte que je termine avec une expression régulière incorrecte. Qu'est-ce que je fais mal ici? "(char)*iter_end == '*'"
doit être vrai pour le code dans l'instruction if à exécuter (ce qu'il fait), alors pourquoi le même itérateur ne fonctionne-t-il pas lorsqu'il est passé à erase()?
Heureusement, avec les chaînes que vous n'avez pas besoin d'utiliser les itérateurs, la plupart des fonctions ont une forme qui prend un index à la place. Pourtant, comme vous le dites, même avec un effacement indexé, il devrait toujours être fait "de l'avant". –
P4tXrx5jrMlbhyludk9pxHBT30kGHo9n: vous avez raison à propos de end(), mais il y a un iter_end-- là-dedans qui regarde le dernier caractère de la chaîne. –
Cela prend tout son sens, et inverser l'ordre a résolu le problème. Merci! – jeffm