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

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


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
Fuchsi2001 
Beitragsersteller
 25.02.2016, 06:13

Danke werd ich machen

0

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

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

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)

Woher ich das weiß:Berufserfahrung – Software-Entwickler

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