Ich versuche, eine if-Anweisung in einer Schleife mit einem Iterator über eine Zeichenfolge auszuführen, kann aber nicht herausfinden, wie das aktuelle Zeichen für die if-Anweisung abgerufen werden soll:
%Vor%Kann jemand mir helfen, den aktuellen Charakter zu bekommen, damit ich einige zusätzliche if-Aussagen machen kann?
Ich kann nicht herausfinden, wie man den aktuellen Charakter bekommt
Sie machen es hier zweimal:
%Vor% Wenn Sie einen Iterator dereferenzieren ( *i
), erhalten Sie das Element, auf das er zeigt.
Dies ist ein String-Literal, kein Zeichen. Zeichenkonstanten verwenden einfache Anführungszeichen, z. B. '-'
.
Dies wäre bei Rückwärts-Iteratoren viel einfacher:
%Vor%Andere Antworten haben das spezielle Problem gelöst, das Sie haben, aber Sie sollten wissen, dass es verschiedene Ansätze gibt, Ihr tatsächliches Problem zu lösen: löscht Elemente, die eine Bedingung erfüllen . Das lässt sich leicht mit dem remove / Erase Idiom lösen:
%Vor%Auch wenn das auf den ersten Blick etwas umständlich erscheint, ist es nicht mehr überraschend, wenn Sie es ein paar Mal gesehen haben. Es ist eine effektive Methode, um Elemente aus einem Vektor oder einer Zeichenfolge zu löschen.
Wenn Ihr Compiler keine Lambda-Unterstützung hat, können Sie einen Funktor erstellen und als drittes Argument an remove_if
übergeben:
Sie haben es direkt oben in der vorherigen if
-Anweisung: i
ist ein Iterator, also gibt *i
das Zeichen, auf das der Iterator verweist.
Beachten Sie, dass es im Allgemeinen einfacher ist, ein reverse_iterator
mit rbegin
und rend
zu verwenden, wenn Sie rückwärts durch eine Sammlung iterieren. Ich würde wahrscheinlich stattdessen einen vorgefertigten Algorithmus verwenden.