Zeichen in String ersetzen



  • Hallo ich versuche gerade folgende Klausuraufgabe zu lösen:

    Schreiben Sie eine Funktion, die in einer Zeichenkette (mindestens 5 Zeichen) nach einem Zeichen sucht und mit einem anderen austauscht. Diese Funktion hat den folgenden Prototyp:

    int ersetzeZeich(char* s, char altZeich, char neuZeich);
    

    6
    Im main-Programm geben Sie die Zeichenkette interaktiv ein und fragen Sie nach dem auszutauschenden und einzufügenden Buchstaben. 6
    Geben Sie die veränderte Zeichenkette wieder auf dem Bildschirm aus. 3

    Bis jetzt hab ich das so als Grundgerüst,... weiß aber nicht wie ich die Funktion gestalten soll. Kann mir jemand helfen?

    #include <iostream>
    using namespace std;
    
    int ersetzeZeich(char* s, char altZeich, char neuZeich)
    {
    
    }
    
    int main() 
    
    {
    	// defintion
    	string text;
    	char zneu;
    	char zalt;
    
    	//einlesen
    	cout <<" Bitte Text eingeben: "; cin>>text;
    
    	cout <<text;
    
    	cout <<"Welcher Buchstabe soll ersetzt werden?"; cin>>zalt;
    	cout <<"Durch was soll der Buchstabe ersetzt werden?" cin>>zneu;
    
    	return 0;
    }
    


  • Google sollte da mehr als genügend Stoff bieten...
    Wenn dir der richtige Ansatz fehlt, informier dich mal über std::string:replace in Kombination mit std::string::find.



  • Darfst du C++ verwenden, oder C mit cout?
    Dein Einlesen funktioniert nicht wie gedacht..



  • Nymer schrieb:

    Darfst du C++ verwenden, oder C mit cout?
    Dein Einlesen funktioniert nicht wie gedacht..

    Darf C++ benutzen 😉



  • Ersetzen und [url=http://en.cppreference.com/w/cpp/string/basic_string/getline]einlesen.
    [/url]

    Oh und

    using namespace std;
    

    ist böse. 😉



  • Nymer schrieb:

    Ersetzen und [url=http://en.cppreference.com/w/cpp/string/basic_string/getline]einlesen.
    [/url]

    Oh und

    using namespace std;
    

    ist böse. 😉

    Warum ist das böse? Haben das bis jetzt immer so verwendet. Bitte um Erklärung, habe erst seit 4 Wochen C++ 😕



  • [...] ist böse.

    Nicht direkt, es ist nur in Headern nicht zu empfehlen, da sonst der gesamte Namensraum std unkontrollierbar (man weiß nie, welche .cpp-Datei den Header einbindet, in dem std ausgeschüttet wurde) ausgeschüttet wird und es zu unvorhergesehenen Namenskonflikten kommen kann.

    Wenn du das nach alter Manier ohne die ganzen Standard-Funktionen machen willst hier mein Vorschlag:
    Geh die übergebene Zeichenkette bis zum Ende per for -Schleife durch und vergleiche die Zeichen nacheinander mit dem altZeich . Wenn der Vergleich true zurückliefert, überschreib das Zeichen an der momentanen Position mit dem neuZeich . Wenn du C++ seit 4 Wochen hast sollte dir die Codeliche Umsetzung nicht schwer fallen.

    Dein Einlesen funktioniert nicht wie gedacht..

    Bis auf die Tatsache, dass er keine Leerzeichen eingeben sollt' sehe ich da grad keinen Fehler... 😕 Bin aber auch schon bisschen müd'.



  • Habs jetzt so probiert, klappt leider nicht 😞

    #include <iostream> 
    using namespace std; 
    
    void ersetzeZeich(char* s, char altZeich, char neuZeich) 
    { 
    	while(*s)
    
    	{   if(*s == altZeich)   *s = neuZeich;
    
    	    s++;
    
        }
    } 
    
    int main() 
    
    { 
        // defintion 
        char string[5]; 
        char zneu; 
        char zalt; 
    
        //einlesen 
        cout <<" Bitte Text eingeben: "; cin>>string; 
    
        cout <<string; 
    
        cout <<"Welcher Buchstabe soll ersetzt werden?"; cin>>zalt; 
        cout <<"Durch was soll der Buchstabe ersetzt werden?"; cin>>zneu; 
    
        ersetzeZeich(string, zalt, zneu);
    
        cout<<"Getauscht: "<<string;
    
        return 0; 
    }
    

    zweiter Versuch, auch gescheitert:

    #include <iostream> 
    using namespace std; 
    
    int temp;
    
    void ersetzeZeich(char* s, char altZeich, char neuZeich) 
    { 
    	for(int i=0; i<5; i++)
    	{
    		if(s* ==altZeich)
    		{
    			temp=altZeich;
    			altZeich=neuZeich;
    			neuZeich=temp;
    		}
    	}
    
    } 
    
    int main() 
    
    { 
        // defintion 
        char string[5]; 
        char zneu; 
        char zalt; 
    
        //einlesen 
        cout <<" Bitte Text eingeben: "; cin>>string; 
    
        cout <<string; 
    
        cout <<"Welcher Buchstabe soll ersetzt werden?"; cin>>zalt; 
        cout <<"Durch was soll der Buchstabe ersetzt werden?"; cin>>zneu; 
    
        ersetzeZeich(string, zalt, zneu);
    
        cout<<"Getauscht: "<<string;
    
        return 0; 
    }
    


  • dein erster versuch sieht eigentlich ganz gut aus (ok, ist C mit cout aber egal). was klappt da nicht?

    was da falsch ist, ist dein main programm.
    womit enden C-strings? richtig mit '\0'. und wo ist die bei deinem string? richtig nirgends

    und was passiert wenn du mehr als 5 zeichen eingibst? auch richtig, BUMM! (so ein feuerball junge)

    nimm wenigstens in main statt char[] oder char* lieber std::string und dann noch am besten so

    std::string str;
    
    getline(std::cin, str);
    
    ersetzeZeichen(str.c_str(), a, b);
    

Anmelden zum Antworten