Wie kann man in C++ ein Wort in umgekehrter Reihenfolge ausgeben?

... komplette Frage anzeigen

8 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ß! :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Fuchsi2001
25.02.2016, 06:13

Danke werd ich machen

0
Kommentar von TeeTier
25.02.2016, 06:18

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. :)

0

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)

Antwort bewerten Vielen Dank für Deine Bewertung

Hi, "String" ist eine Klasse und beinhaltet viele nützliche Methoden. Diese Methoden kannst du mit den Punkt-Operator abrufen. 

Es gibt statische Methoden die du so aufrufen kannst

String s_name = "Kevin";
char *c_name = String.toChar(s_name);

oder nicht statische die du so aufrufst:

String s_name = "Peter";
char *c_name = name.toChar(); 

Das würde einen String in einen char pointer umwandeln wenn es so eine Methode "ToChar" gäbe (kA ob die existiert, hab ich mir ausgedacht). 

Einen pointer brauchst du weil du nicht genau weißt wie lang der String ist. Der Pointer pointet (also zeigt) nur auf den Anfangsbuchstaben.

Hast du den Charpointer kannst du einfach seine Länge abfragen und dann mit einer Schleife umgekehrt wiedergeben. 

Falls du noch nicht weiß was Pointer sind oder es noch nicht ganz verstehst solltest du das erstmal tun! Die sind unheimlich mächtig und werden in C++ überall benutzt. 

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Bujin
24.02.2016, 21:53

Hier findest du übrigens alle Methoden die String beinhaltet: http://en.cppreference.com/w/cpp/string/basic_string

Member sind Variablen einer Klasse und Methoden (Member functions / methods) sind Funktionen einer Klasse. 

Guckst du da durch findest du die Methode "c_str" die sich nach der anhört die du suchst. 

http://en.cppreference.com/w/cpp/string/basic\_string/c\_str

Probier damit am besten rum! 

0
Kommentar von Bujin
24.02.2016, 21:58

kA wer die Pappnasen sind die hier runter-voten aber wenn man etwas auszusetzen hat, sollte man wenigstens schreiben was es ist sonst bleiben alle dumm. Danke

1

Danke für die schnellen und präzisen Antworten!

Antwort bewerten Vielen Dank für Deine Bewertung

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
}
}
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Bujin
24.02.2016, 21:48

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). 

2

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...

Antwort bewerten Vielen Dank für Deine Bewertung