web-dev-qa-db-de.com

Wie kann man einen std :: string umkehren?

Ich versuche herauszufinden, wie ich die Zeichenfolge temp umkehren kann, wenn ich die Zeichenfolge in Binärzahlen gelesen habe

istream& operator >>(istream& dat1d, binary& b1)    
{              
    string temp; 

    dat1d >> temp;    
}
22
Kameron Spruill

Ich bin nicht sicher, was Sie mit einer Zeichenfolge meinen, die Binärzahlen enthält. Zum Umkehren eines Strings (oder eines STL-kompatiblen Containers) können Sie jedoch std::reverse() verwenden. std::reverse() wird an der richtigen Stelle ausgeführt, daher möchten Sie möglicherweise zuerst eine Kopie der Zeichenfolge erstellen:

#include <algorithm>
#include <iostream>
#include <string>

int main()
{
    std::string foo("foo");
    std::string copy(foo);
    std::cout << foo << '\n' << copy << '\n';

    std::reverse(copy.begin(), copy.end());
    std::cout << foo << '\n' << copy << '\n';
}
51
Max Lybbert

Versuchen

string reversed(temp.rbegin(), temp.rend());

EDIT : Bearbeitung wie gewünscht.

string::rbegin() und string::rend(), die für "reverse begin" und "reverse end" stehen, geben reverse iterators in den String zurück. Dies sind Objekte, die die Standard-Iterator-Schnittstelle unterstützen (operator*, Um auf ein Element, dh ein Zeichen der Zeichenfolge, zu dereferenzieren, und operator++, Um zum "nächsten" Element zu gelangen), so dass rbegin() zeigt auf das letzte Zeichen der Zeichenkette, rend() zeigt auf das erste Zeichen, und wenn der Iterator weitergeschaltet wird, wird es auf das Zeichen previous verschoben (dies ist es, was bewirkt es ist ein umgekehrter Iterator).

Schließlich ist der Konstruktor, an den wir diese Iteratoren übergeben, ein Zeichenfolgenkonstruktor der Form:

template <typename Iterator>
string(Iterator first, Iterator last);

das akzeptiert ein Paar von Iteratoren eines beliebigen Typs, der einen Zeichenbereich angibt, und initialisiert die Zeichenfolge mit diesem Zeichenbereich.

29
HighCommander4