Probleme mit einer Funktion mit Parameter String



  • Hallo,
    ich versuche mich an einer Aufgabe aus dem Kapitel String.
    Die Aufgabe:
    Schreiben Sie ein Programm, welches einen String einliest, und dann rückwärts wieder ausgibt.(Eins pro Zeile)
    Folgendes habe ich geschrieben, funktioniert aber nicht 😢

    #include <iostream>
    #include <cstdlib>
    #include <string>
    
    using namespace std;
    
    int rueckwaerts(string a)
    
    {
    	int a1 = a.length();
    
    	for (int i = a1; i >= 0; i--)
    		{
    			return a[i];
    		}
    }
    
    void main()
    {
    	string f;
    	cin >> f;
    	cout << rueckwaerts(f);
    	system("PAUSE");
    
    }
    


  • Mit dem return wird die Funktion verlassen.



  • Danke für die schnelle Hilfe.
    Nunja ohne return wird mir auch die null ausgegeben aber eben nicht den String den ich einlese:(
    Woran könnte es noch liegen?



  • Ein String besteht aus Zeichen ( char )

    cout ist so schlau, dass es bei einem int den Zahlenwert ausgibt.

    Entweder du drehst den String komplett um und gibst ihn zurück oder du gibst die Zeichen direkt in der Schleife aus (ja, so einfach ist das).

    Und das mit der 0 liegt am falschen Startindex.



  • von meinem Smartphone daher sorry für manche Anfangsbuchstaben.

    void reverse(const std::String & str)
    {
    for (auto it = std::crbegin(str); it != std::crend(str); ++it)
    {
       Std::cout << *it;
    }
    std::cout << std::endl;
    }
    

    Edit 1: Du bist ja noch ganz am Anfsng aber ich hätte noch ein paar Ratschläge.

    1.du solltest nach Möglichkeiten bei stl Container die dafür vorgesehenen iteratoren nutzen.
    2. du solltest dir mal den Unterschied zwischen call by value und all by reference angucken. Du übergibst den String nämlich by value das bedeutet das eine Kopie vom String erzeugt wird was in deinem Fall unnötig ist. Von daher solltest du den String per const reference übergeben.



  • Soweit bin ich jetzt gekommen.
    Es wird aber immer nur der letzte Buchstabe ausgegeben.

    #include <iostream>
    #include <cstdlib>
    #include <string>
    
    using namespace std;
    
    char funktion(string str)
    {
    
    	int l = str.length();
    
    	for (int i = l - 1; i >= 0; i--)
    	{
    		char ch = str.at(i);
    		return ch;
    	}
    
    }
    void main()
    {
    	string eingabe;
    	cin >> eingabe;
    	cout << funktion(eingabe);
    
    	system("Pause");
    }
    


  • DirkB schrieb:

    Mit dem return wird die Funktion verlassen.

    Sofort. Da wird nicht auf das Ende der Schleife gewartet.

    DirkB schrieb:

    Entweder du drehst den String komplett um und gibst ihn zurück

    Dazu wäre ein passender Rückgabetyp schon mal wichtig.

    DirkB schrieb:

    oder du gibst die Zeichen direkt in der Schleife aus (ja, so einfach ist das).

    Ein return ist keine Ausgabe.
    cout ist eine.

    Achte darauf, dass ich Alternativen angegeben habe.



  • Wie geht das mit dem komplett umdrehen ?
    Kannst du evtl nen Bsp posten?
    Grüße



  • newcomer007 schrieb:

    Wie geht das mit dem komplett umdrehen ?
    Kannst du evtl nen Bsp posten?
    Grüße

    Beispiel mit Implementierung und Erklärung und allem drum und dran.


Anmelden zum Antworten