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. 3Bis 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
stdunkontrollierbar (man weiß nie, welche .cpp-Datei den Header einbindet, in demstdausgeschü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 perfor-Schleife durch und vergleiche die Zeichen nacheinander mit demaltZeich. Wenn der Vergleichtruezurückliefert, überschreib das Zeichen an der momentanen Position mit demneuZeich. 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 nirgendsund 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);