String umkehren ?



  • Servs zusammen,

    versuche eine kleine Aufgabe zu lösen und komme irgendwie nicht weiter 😢
    Ich versuche die Eingabe rückwärts wieder auszugeben, hab hier durchs Forum gestöbert und auch einige Lösungen gefunden, doch diese waren nicht das was ich gesucht hatte 😢

    Aufgabe ist folgende:
    Schreiben Sie eine Funktion void str_reverse(string& str), die die Reihenfolge der Zeilen im String str umkehrt!

    Die Aufageb hab ich mit dem reverse Algo gelöst, das war nicht das Problem - ich würd die Aufgabe auch gern durch eine Schleife lösen. Doch irgendwie will das Ganze nicht so wie ich mir das vorstelle.

    #include<string> 
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    void str_umkehr(string& s)
    {
    	cout << "Schreiben Sie einen Satz: ";
    	getline(cin, s);
    	reverse(s.begin(), s.end());
    	cout << "\nIhre Eingabe rueckwaerst lautet: " << s << endl;
    }
    
    void str_reverse(string& str)
    {
    	cout << "Schreiben Sie einen Satz: ";
    	getline(cin, str);
    	int i = str.length();
    	int n = 0;
    	string temp_str;
    	temp_str.length();
    
    	for(i; i>=0; i--)
    	{
    		temp_str[i] = str[n];
    		n++;
    	}
    	cout << "\nIhre Eingabe rueckwaerts lautet: " << temp_str << endl;
    }
    
    int main()
    { 
    		// string s;   
            // str_umkehr(s);
    
    		string str;
    		str_reverse(str);
    
    		return 0;
    }
    

    Kann ich die Länge des strings str dem string temp_str zuweisen ? Weil so wie ich es oben hab, geht es nicht - bekomme beim Ausführen eine Fehlermeldung, das die Anweisung nicht auf dem Speicher durchgeführt werden kann.
    Evt. kann mir einer von euch helfen - für eure Geduld und Hilfe bin ich wie immer sehr dankbar 😉

    Xecutor



  • 1. Ein String endet mit /0, das ist ein Terminierungszeichen, wenn das als erstes kommt (und das muss es, denn es ist immer das Letzte Zeichen, eben das Terminierungszeichen).

    2.Wie wärs so:

    void str_reverse()
    {
    	cout << "Jib wat ein:" << endl;
    	string eing;
    	cin >> eing;
    	int n = (strlen(eing.c_str()) - 1);
    	for (int i=0; i < (strlen(eing.c_str())); i++)
    	{
    		cout << eing.c_str()[n];
    		n--;
    	}
    	cout << endl;
    }
    


  • temp_str.resize(str.length());



  • Glamdrink schrieb:

    int n = (strlen(eing.c_str()) - 1);

    Autsch. Sowas tut doch weh.



  • #include<string>
    #include<iostream>
    
    using namespace std;
    
    // String umkehren
    string str_reverse(const string & str)
    {
        // temp-String erzeugen
        string temp;
    
            // originalen String von hinten nach vorne durchlaufen
            // und in temp speichern
            for (int i=str.length()-1; i>=0; i--)
            {
            temp +=str[i];
            }
    
        // umgekehrten String zurückgeben
        return temp;
    }
    
    int main()
    {
        // String erzeugen
        string str;
    
        // eine Zeile auslesen
        cout << "Schreiben Sie einen Satz: "<<endl;
        getline(cin, str);
    
        // umkehren lassen
        string reverse =  str_reverse(str);
    
        // rückwärts ausgeben
        cout<<"von hinten: "<<endl;
        cout<<reverse<<endl;
    
        return 0;
    }
    


  • Schreiben Sie eine Funktion void str_reverse(string& str), die die Reihenfolge der Zeilen im String str umkehrt!

    void str_reverse(string& str) {
     int slength = str.length()-1;
     for(int i=0; slength/2>=i; ++i) {
       char temp = str[i];
       str[i] = str[slength-i];
       str[slength-i] = temp;
     }
    }
    

    Ich sehe in der Aufgabenstellung nichts von ausgeben, hier die variante die tatsächlich den String umkehrt.

    Gruß Mirauder Mo



  • Hallo,

    war spricht eigentlich hier gegen:

    ...
     string reverse(str.rbegin(), str.rend());
    ...
    


  • Ihr seid sehr fleißig 😉

    Erstmal danke euch allen für die Beispiele und Shade dir für den Hinweise, werd ich mir merken 😉
    Das Einzige was bei mir funktioniert, ist das von Glamdrink *g*

    @CarstenJ,
    deine Lösung hab ich hier schon im Forum gefunden, nur leider will die bei mir nicht funktionieren. Ich krieg jedesmal beim Compilieren eine Fehlermeldung angezeigt - weiss jetzt leider nicht mehr welche genau das war.

    Xecutor



  • CarstenJ schrieb:

    war spricht eigentlich hier gegen:

    ...
     string reverse(str.rbegin(), str.rend());
    ...
    

    Die Aufgabenstellung?



  • Hallo,

    wieso das? Was widerspricht denn dabei der Aufgabenstellung?



  • da steht "Schreiben Sie eine Funktion".



  • Wie die Funktion das bewerkstelligen soll, steht doch da nicht. Wieso kann ich nicht schreiben:

    void str_reverse(string& str) 
    { 
        string reverse(str.rbegin(), str.rend());
        str = reverse;
    }
    


  • CarstenJ schrieb:

    wieso das? Was widerspricht denn dabei der Aufgabenstellung?

    Die Aufageb hab ich mit dem reverse Algo gelöst, das war nicht das Problem - ich würd die Aufgabe auch gern durch eine Schleife lösen.



  • Ok ok..hast gewonnen. :p


Anmelden zum Antworten