c ++ - String-Iterator

8

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?

    
Joe 24.03.2011, 17:05
quelle

5 Antworten

19
  

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.

%Vor%

Dies ist ein String-Literal, kein Zeichen. Zeichenkonstanten verwenden einfache Anführungszeichen, z. B. '-' .

%Vor%

Dies wäre bei Rückwärts-Iteratoren viel einfacher:

%Vor%     
James McNellis 24.03.2011, 17:07
quelle
3
%Vor%

sollte

sein %Vor%     
Luzik 24.03.2011 17:11
quelle
2

Um das Zeichen zu erhalten, sagen Sie einfach *i , aber das ist nicht genug. Ihre Schleife ist nicht zulässig, da sie nicht vor begin dekrementieren darf. Sie sollten umgekehrte Iteratoren oder den Algorithmus remove_if verwenden.

    
Mark B 24.03.2011 17:10
quelle
2

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:

%Vor%     
quelle
1

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.

    
Jerry Coffin 24.03.2011 17:10
quelle

Tags und Links