Wort umgegehrt ausgeben
-
Hallo zusammen,
bin absoluter Neuling.
Ich würde gerne einen String den ich einlese umgekehrt ausgeben lassen
#include <iostream.h>
int main ()
{
char myname[20];
cin >>myname;?????
cout <<myname;
return 0;}
Bis dann
mobile
-
for(int x=strlen(myname)-1; x>=0; --x)
cout<<myname[x];Für strlen brauchst du #include <cstring> und bei der Gelegenheit kannst du auch gleich <iostream.h> durch <iostream> ersetzen und unter deine Includes
using namespace std;
schreiben. Die iostream.h-Version ist nämlich veraltet.
[ Dieser Beitrag wurde am 06.06.2003 um 13:19 Uhr von DrGreenthumb editiert. ]
-
std::reverse() ist bisweilen auch recht praktisch: http://www.sgi.com/tech/stl/reverse.html
-
...oder mit nem stack arbeiten
cu todo
-
Original erstellt von todo:
**...oder mit nem stack arbeitencu todo**
Hmm kannst du das mal näher erklären, das versteh ich nicht.
-
Du gehts den String von links nach rechts durch, und legst das aktuelle Zeichen auf einen Stack. Wenn Du durch bist, dann gehst Du den Stack 'von oben nach unten' zurück.
void rueckwaerts(char const *str) { if (!*str) return; rueckwaerts(str+1); std::putchar(*str); }
-
stack<char> s;
//string speichern
s.push('H');
s.push('a');
s.push('l');
s.push('l');
s.push('o');//string ausgeben:
while(!s.empty())
{
cout<<s.top();
s.pop();
}
-
Ein Stack ist ein Datenstruktur, die nach dem Prinzip last-in-first-out
arbeitet. Ist für dieses Problem aber nicht angemessen, da man zuerst
jedes Zeichen des Strings extra speichern müsste und anschließend wieder
laden - obwohl schon alles in der Stringvariable gespeichert ist.
-
Beispiel für Reverse
#include <string> #include <algorithm> std::string t("Hallo Welt"); std::reverse(t.begin(),t.end());
-
Ich würde gerne einen String den ich einlese umgekehrt ausgeben lassen
In C++:
#include <algorithm> #include <string> #include <iostream> using namespace std; int main() { string eingabe; getline(cin, eingabe); copy(eingabe.rbegin(), eingabe.rend(), ostream_iterator<char>(cout)); }
-
HumeSikkins Lösung ist aber sicher inperformanter, wenn man jedes char einzeln ausgibt. Da lieber reverse'n und ausgeben.
-
Dass Humes Lösung weniger performant ist glaube ich eigentlich weniger (und wenn, dann wird das durch die lahmen Terminal-Emulationen ausgeglichen). Trotzdem bringt std::reverse und std::copy/rbegin/rend/outputiterator dem Programmier-Noob wenig. Woher soll er die Implementierung verstehen, wenn er nur eine "magische" Prozedur aufruft?
-
Ich mach mal n Test...
-
HumeSikkins Lösung ist aber sicher inperformanter, wenn man jedes char einzeln ausgibt. Da lieber reverse'n und ausgeben.
Das ist Äpfel mit Elefanten verglichen. Ich verändere den Originalstring nicht. Wenn dann also neues Objekt + reversen.
Ich mach mal n Test...
Naja, bei kurzen Ausgaben (Hallo Welt und co) ist meine Variante schneller. Bei längeren Sachen (> 2kB) dreht sich das ganze dann.
Bei der Ausgabe ist der Unterschied ja nur, dass bei meiner Variante n-Mal (n = Anzahl der Zeichen im String) sputc aufgerufen wird anstatt genau einmal sputn.
Allerdings gibt es auch Implementationen, bei denen sputn (genauer xsputn) nichts weiter macht also n-Mal sputc aufzurufen.
[ Dieser Beitrag wurde am 06.06.2003 um 19:11 Uhr von HumeSikkins editiert. ]