Wie kann man in C++ ein Wort in umgekehrter Reihenfolge ausgeben?
Hey Leute, folgendes Problem: Man hat ein einfaches Konsolenprogramm und gibt ein beliebiges Wort(oder eine Zahlen Zeichen und Buchstabe kombination z.b 3/$5@A) ein (das aber über 3 Zeilen in der Konsole geht oder kürzer bzw. Länger ist ) und dieses soll danach in umgekehrter reihenfolge ausgegeben werden also ungefähr so
Input: Hall+0 Output:0+llaH
Wie löst man das normalerweise? Bitte einsendungen als Codebeispiel wenn es keine umstände macht da ich noch blutiger Anfänger bin :( Danke für alle Antworten
4 Antworten
Die Antwort von DontHaveAName halte ich bisher für die mit Abstand sauberste. :)
Alternativ kannst du auch noch reverse() benutzen:#include <algorithm>
// ...
string s("Hallo!");
cout << s << endl;
reverse(s.begin(), s.end());
cout << s << endl;
Sei dir aber darüber im Klaren, dass weder meine, noch die Lösung von DontHaveAName vernünftig mit Unicode-Kodierungen umgeht, und die Elemente des Strings als reine Bytes behandelt!
Falls dich das Problem betrifft, guck dir einfach die wstring-, u16string- oder u32string-Klassen an. :)
Viel Spaß! :)
PS: Auch wenn in der C++ Referenz "The iterator returned can be used to access or modify characters." steht, mag ich es persönlich überhaupt nicht, den internen Puffer der String-Klasse direkt zu manipulieren, und reverse_copy() anstelle von reverse() empfinde ich als wesentlich schöner, macht aber wieder deutlich mehr Aufwand.
Deshalb verweise ich an dieser Stelle nochmal auf die Antwort von DontHaveAName, denn schicker als ...
string a("Hallo!");
string b(a.rbegin(), a.rend());
... geht es kaum. :)
z.B. so :
#include <string.h> // for strlen()
// reverse the given null-terminated string in place
void inplace_reverse(char * str)
{
if (str)
{
char * end = str + strlen(str) - 1;
// swap the values in the two given variables
// XXX: fails when a and b refer to same memory location
# define XOR_SWAP(a,b) do\
{\
a ^= b;\
b ^= a;\
a ^= b;\
} while (0)
// walk inwards from both ends of the string,
// swapping until we get to the middle
while (str < end)
{
XOR_SWAP(*str, *end);
str++;
end--;
}
# undef XOR_SWAP
}
}
Hi, falls du den Code nicht selbst geschrieben hast solltest du beachten dass man so Urheberrechte andere verletzen kann. Die meisten die Code veröffentlichen erwarten zumindest dass man eine Quelle angibt wenn man ihn benutzt (Kommt auf die Lizenz an).
Ein Objekt der Klasse string verhält sich in den allermeisten Aspekten wie ein schreibgeschütztes char[] (Array von char). Deshalb geht folgendes:
for (int i = wort.length() - 1; i >= 0; i--) {
cout << wort[i];
};
(Jedenfalls in Visual Studio, in anderen C++-Dialekten möglicherweise anders)
Ungefähr so:
std::string test = "Hallo wie geht es dir";
std::cout << std::string (test.rbegin(), test.rend()) << std::endl;
Nächste mal solltest du einfach mal googlen...