Austauschen von Zeichenketten
-
Hallo,
es geht darum, eine Zeichenkette einzugeben zB: noch ein einzeller! (Rufzeichen beendet) Nun soll eine Abfolge von Zeichen in dieser Zeichenkette ersetzt werden.
ZB "ein" durch "mehr", Ergebnis: "noch mehr mehrzeller!"
In erster Linie zunächst einmal wollte ich es mit gleich langen Zeichenketten ausprobieren:
#include <iostream> using namespace std; char global[100]; void replace(char *wort, char *austausch, char *global){ int i, j=0, m=0; for(;austausch[m]!='!';m++); m=m-1; //Anzahl der Zeichen vom Austauschwort for(i=0;global[i]!='!';i++) { if((global[i]==wort[i]) && (global[i+1]==wort[i+1])) { global[i]=austausch[j]; j++; } if(j>m) j=0; } } int main() { char global[100]; char austausch[100]; char wort[100]; int m=0; cout << "Gib die Zeichenkette ein(endet mit !): " << endl; cin.getline(global,100); cout << "Parameter 1 eingeben: " << endl; cin >> wort; cout << "Parameter 2 eingeben: " << endl; cin >> austausch; replace(wort, austausch, global); cout <<global; }Was genau funktioniert da nicht mit dem ersetzen? Verstehe ich nicht ganz...
Danke im Voraus!
prim
-
ist das eine Hausaufgabe, in der du mit "char*" arbeiten musst? Ansonsten solltest du dir mal std::string::replace ansehen...
-
daddy_felix schrieb:
ist das eine Hausaufgabe, in der du mit "char*" arbeiten musst? Ansonsten solltest du dir mal std::string::replace ansehen...
Ja, eine Aufgabe, wo ich char* benutzen muss leider... trotzdem danke für Antwort!
-
prim000 schrieb:
#include <iostream> using namespace std; char global[100];Wozu ist dieses global da? Das wird scheinbar nirgens benutzt.
prim000 schrieb:
Was genau funktioniert da nicht mit dem ersetzen?
Keine Ahnung. Hab ich mir jetzt nicht angeguckt. Hast du mal den Debugger verwendet und das, was du selbst fabriziert hast, Schritt für Schritt nachvollzogen? So solltest du ja eigentlich zum Ziel kommen.
-
Du hast Recht, kann man weglöschen, weil unten eh mit Pointern gearbeitet wird.
Debugger? Ok, gibt es dazu ein gutes Tutorial? Ich benutze Codeblocks. Wird wohl langsam Zeit sich den mal genauer anzuschauen.
Würd mich trotzdem über weitere Hinweise sehr freuen!
-
prim000 schrieb:
Du hast Recht, kann man weglöschen, weil unten eh mit Pointern gearbeitet wird.
Debugger? Ok, gibt es dazu ein gutes Tutorial? Ich benutze Codeblocks. Wird wohl langsam Zeit sich den mal genauer anzuschauen.
Würd mich trotzdem über weitere Hinweise sehr freuen!
Uff, das ist mir jetzt peinlich, ich überleg da seit einer Stunde und gleich nach dem Posten fällt mir ein Fehler auf:
for(;austausch[m]!='!';m++); m=m-1; //Anzahl der Zeichen vom Austauschwort for(i=0;global[i]!='!';i++) { if((global[i]==wort[i]) && (global[i+1]==wort[i+1])) { global[i]=austausch[j]; j++; } if(j>m) j=0; }Das i bei wort[] in der if Abfrage kann ja nicht stimmen... Moment ich melde mich, wenn ich das Teilproblem löse.
-
prim000 schrieb:
Moment ich melde mich, wenn ich das Teilproblem löse.
Tipp: besser Du zerlegst Dein Problem erst mal in zwei Teilprobleme:
1.) eine Funktionchar* search( char* text, int len_of_text, const char* pattern, int len_of_pattern );diese Funktion sucht in der Zeichenfolge
textmit der Längelen_of_textnach einer Zeichenfolgepatternmit der Länge vonlen_of_patternund gibt den Zeiger auf die gefundene Zeichenfolge zurück oder NULL, wenn nichts gefunden wurde.
2.)void replace( char* text, int len_of_text, int pos, int pos2, const char* place, int len_of_place );tauscht in 'text' zwischen den Positionen [pos,pos2) die Zeichen durch 'place' aus. Der Aufrufer muss sich hier darum kümmern, dass kein Speicher überschrieben wird.
das ist einfacher, als mit einem Schlag beides gleichzeitig zu machen.
:xmas2: Werner