Text Rückwärts

gnx

Grünschnabel
Hallo liebe Community,

stehe vor Folgendem Problem, ich soll einen individuellen Satz rückwärts ausgeben lassen.
Habe das soweit, jedoch erkennt er immer nur das erste Wort und nicht weiter - woran könnte das liegen?
Vielen Dank schonmal. :)

Das cout in der Schleife habe ich drin, damit ich sehen kann wie weit er wirklich geht ;)

Code:
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char eingabe[20]="";
    char rueckwaerts[20]="";
    int y=-1;

    cout << "Bitte geben Sie einen Text ein: ";
    cin >> eingabe;

	for(int x=strlen(eingabe); x>=0; --x)
    {
        strncpy(&rueckwaerts[y++], &eingabe[x], 1);
		cout << rueckwaerts << endl;
    }

    cout << "Text Eingabe: " << eingabe << endl;
    cout << "Text Rueckwaerts: " << rueckwaerts << endl;
    
    system("pause");
    return 0;
}
 
Hi.
Code:
    cout << "Bitte geben Sie einen Text ein: ";
    cin >> eingabe;
Du liest hier ja auch nur ein Wort. Um eine ganze Zeile zu lesen, kannst du die getline Methode verwenden.

Gruß

PS: Da sind aber noch ein paar Fehler drin. Z.B. greifst du auf rueckwaerts[-1] zu. Das ist nicht erlaubt und löst undefiniertes Verhalten aus.

Wenn du den Text nur rückwärts ausgeben sollst, mußt du den Text ja nicht unbedingt rückwärts irgendwohin schreiben.

Außerdem hast du den rueckwaerts String nicht mit \0 terminiert, was eine Zugriffsverletzung zur Folge haben kann.

Dann ist das Zeichen eingabe[strlen(eingabe)] == '\0'. Das solltest du einfach bei der Ausgabe (oder beim Kopieren) überspringen.

Und etwas komisches: Wenn du ein einzelnes Zeichen kopieren willst, mußt du dafür nicht strncpy aufrufen:
C:
rueckwaerts[y++] = eingabe[x];
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: gnx
Danke - mit getline funktioniert es ohne Probleme :)
Eine Fehlermeldung bekomme ich noch, welche aber Visual Studio "umgeht" - ich fänds nur schön zu wissen was das heißt. :)

Code:
Run-Time Check Failure #2 - Stack around the variable 'rueckwaerts' was corrupted.

Gruß
Moritz
 
Hallo,

abgesehen vom Eingabeproblem, würde ich außerdem durchgängige Nutzung der STL vorschlagen. Damit kannst du beliebige Textlängen verarbeiten:
C++:
std::string strIn, strOut;

std::cout << "Bitte geben Sie einen Text ein: ";    
std::getline(std::cin, strIn);

strOut = strIn;
std::copy(strIn.rbegin(), strIn.rend(), strOut.begin());
std::cout << strOut << std::endl;
Gruß
MCoder
 
Eine Fehlermeldung bekomme ich noch, welche aber Visual Studio "umgeht" - ich fänds nur schön zu wissen was das heißt. :)

Code:
Run-Time Check Failure #2 - Stack around the variable 'rueckwaerts' was corrupted.
Das heißt das du etwas auf dem Stack kaputt gemacht hast. Siehe meine Ergänzungen in meinem letzten Beitrag.

Gruß
 
Danke danke :)

Ja, bin noch ziemlich unerfahren was Programmieren angeht ;) - Ist auch nicht so meine Lieblingsbeschäftigung, aber muss eben auch sein ..

Gruß
Moritz
 
Zurück