whytes FAQ
-
hi leute...ich bin grad im beruflichen gymnasium im bereich der datenverarbeitung und wir schreiben verschiedene funktionen welche ich nicht immer reibungslos erstellen kann.
mir fehlt es seltener an ideen aber dafür öfters an den sprachkenntnissen.
deswegen brauche ich eure hilfe.
ich werden in diesem thread alle meine fragen reinschreiben...nach und nach.
also bitte nicht closen
hier mein erstes problem:
ich brauche eine funktion die einen teil eines textes durch einen anderen ersetzt...
z.B. aaabbbbcddbbbbddkkk
ersetze bbbb durch yyyyyyymein lösungsansatz:
variable vor: aaa
variable mitte: bbbb
variable nach: cddbbbbddkkk
mitte durch ersatzvariable ersetzenvariable nach: cddbbbbddkkk wieder in die drei teile aufteilen.
variable vor: cdd
variable mitte: bbbb
variable nach: ddkkkersetzen und wieder das gleiche bis keine bbbb mehr vorhanden ist.
meine probleme:
- ich kenne nicht die expliziten befehle für diesen vorgang und kann mir den logischen aufbau dieser "schleife" auch nur teilweise vorstellen. wäre dankbar für beispiele.
- ich hab das problem das in meinen testumgebungen immer probleme entstehen wenn mein text leerzeichen beinhaltet (#<string> einsetzen? wenn ja was ist das?)
- wenn ich etwas als string deklariere wird string nicht explizit hervorgehoben wie z.B. int usw.
vielen dank für eure hilfen

-
#include <string>... Da ist die Klasse std::string drin!
Der Ansatz:
1. Suche den zu ersetzenden Teilstring(std::string::find)
2. Lösche den Teilstring aus dem Originalstring(std::string::erase)
3. Füge an die Stelle wo du den Teilstring gelöscht hast den neuen String ein(std::string::insert)
4. Gehe zurück zu 1 bis std::string::find fehlschlägt.(Nehme als Ausgangsposition für std::string::find die Stelle an der du den neuen String eingefügt hast + die Länge des neu eingefügten Strings)Und fertig bist du

-
danke für diesen ansatz aber mein größtes problem ist ja die schleifenerstellung mithilfe der bedingung das zu löschende textbereich im "restlichen" text zu finden.
denn wenn ich es auf den ganzen text immer wieder anwende passiert das:
ich ersetze zB gehen zB durch gehende dann findet er immer wieder gehen in dem eben eingesetzten wort also ist es wichtig nur noch den rest zu bearbeiten und für die schleife die oben gesetzte bedingung zu nehmen.
jedoch kenne ich keine schleife die eine solche bedingung annimmt.
aber danke für deine hilfe

ich bitte um weitere antworten thx weri matsch
-
cool danke hab deine erweiterung eben erst bemerkt.
könntest du mir einen beispielpseudocode daraus erstellen?
vlt könntest du mir den gefallen tun wenigstens die befehle die ich benutze aufzuschreiben. ich weiß zB!!! net wie man einen string ab einer bestimmten stelle in eine variable einfügt und diese prüfung wiederholt ohne schleife...
-
Hmm die Funktionen stehen alle direkt dabei ^^ Guck dir meinen Beitrag nochmal genau an

void replace_all(std::string& string, const std::string& what, const std::string& with) { for (std::size_t pos = string.find(what); pos != std::string::npos; pos = string.find(what, pos)) { string.erase(pos, pos + what.length()); string.insert(pos, with); pos += with.length(); } }... sollte aber das machen was du willst ...
Für die std::string::replace-Fans
void replace_all(std::string& string, const std::string& what, const std::string& with) { for (std::size_t pos = string.find(what); pos != std::string::npos; pos = string.find(what, pos)) { string.replace(pos, what.length(), with); pos += with.length(); } }
-
Vielleicht sollte man anmerken, dass std::string auch eine replace-Methode hat...
-
Und wahrscheinlich ist inplace-ersetzen nicht besonders performant im Vergleich zu einem Zusammenbauen eines neuen Strings (natürlich nur dann, wenn die Größen des zu suchenden und zu ersetzenden Strings sich unterscheiden).
-
vielen dank leute...
hat mir sehr weiter geholfen.nur noch eine kleine frage: was bedeutet dieses immer wieder vorkommende std::
ich habe schon ein paar funktionen erstellt und habe dieses std:: noch nie irgendwo gesehen

lg whyte
danke nochmals für alle bemühungen evil und alle anderen

-
Hallo
Siehe ein passendes Turorial, Stichwort Namespace.
bis bald
akari