J'essaie de faire une instruction IF à l'intérieur d'une boucle avec un itérateur sur une chaîne, mais je ne peux pas comprendre comment obtenir le caractère actuel de l'instruction IF:
for (std::string::iterator i=buffer.end()-1; i>=buffer.begin(); --i) { if (!isalpha(*i) && !isdigit(*i)) { if(i != "-") { // obviously this is wrong buffer.erase(i); } } }
5 Réponses :
Je ne peux pas comprendre comment obtenir le caractère actuel p>
Vous le faites deux fois ici: P>
for (std::string::reverse_iterator i = buffer.rbegin(); i != buffer.rend(); ++i)
si ((* i)! = '-')) au cas où vous auriez besoin de plus de clarification
@ P.R.: Bonne prise sur le "-" code>.
@James merci :) J'étais un instructeur de laboratoire pour un parcours C ++ et je suppose maintenant les premières choses que mes yeux vont se rendre à '' et ==
Utilisation d'un Reverse_iterator code> sera plus simple pour l'itération, mais il sera moins simple à
effacer code> éléments.
@David Rodríguez lors de l'utilisation d'un itérateur avant fait Code> Effacer CODE> Simple, il rend également la boucle illégale car elle décrémentera l'itérateur avant avant commencer code>.
@Mark: La boucle est illégale de chaque sens en raison du efface code>. +1 à vous pour attraper cela et recommander
supprimer_if code>.
Pour obtenir le personnage, dis simplement * i code>, mais cela ne suffit pas. Votre boucle n'est pas légale car elle n'est pas autorisée à décrémenter avant que
commence code>. Vous devez utiliser les itérateurs inverse ou le
supprimer_if code> algorithme. P>
vous l'avez juste au-dessus dans le précédent Notez que si vous allez itérer à travers une collection à l'envers, il est généralement plus facile d'utiliser un si code> instruction:
i code> est un itérateur, donc
* i code> donne le caractère mentionné par le Itérateur. P>
Reverse_iterator code> avec
RBEGIN code> et
Rend code>. J'utiliserais probablement un algorithme pré-emballé à la place. P>
if(*i != '-')
D'autres réponses ont résolu le problème particulier que vous avez, mais vous devez savoir qu'il existe différentes approches pour résoudre votre problème réel: effacer des éléments qui remplissent une condition em>. Qui peut être facilement résolu avec les supprimer / effacer em> idiom: tandis que cela pourrait sembler fastidieux au début, une fois que vous l'avez vu quelques fois, il ne l'aura pas plus se surprenant, et c'est un moyen efficace de supprimer des éléments d'un vecteur ou d'une chaîne. p> Si votre compilateur n'a pas de support Lambda, vous pouvez créer un foncteur et le transmettre comme troisième argument à < code> supprimer_if code>: p>
Vous n'avez pas vraiment besoin de la vérification de l'isalpha et d'Isdigit si vous allez vérifier un caractère spécifique juste après