1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Mehrere wörter in einem String verändern...

Dieses Thema im Forum "C/C++" wurde erstellt von blotte, 11. Juni 2006.

  1. blotte

    blotte Grünschnabel

    Hallo Zusammen,

    vll kann mir jemand bei einem Problem helfen...:

    Es soll ein Text eingelesen werden(text)...dann kann man ein Wort auswählen(findString) und dieses durch in anderes wort ersetzen(replace String)...

    Problem: kommt das ausgewählte Wort (findString) öfter als ein Mal vor, so wird nur das erste geändert.... hier mei bisheriger quellcode...vll kann mir jemand helfen

    Vielen Dank im Voraus...

    Code (Text):
    1. cout << "Bitte geben Sie einen Txt ein: " ;
    2.            getline(cin, text);
    3.  
    4.          
    5.        cout << "Welches Wort moechten sie aendern? " << endl;
    6.  
    7.        getline(cin, findString);
    8.            // liefert Position, ansonsten string::npos, wenn nicht gefunden
    9.            iPos = text.find( findString, 0);
    10.  
    11.            cout << "Welches Wort soll stattdessen eingefuegt werden? " << endl;
    12.        getline(cin, replaceString);  
    13.      
    14.          //boolean wortErsetzen() {
    15.          
    16.          //for ( l = 0; l <= text.length(); l++) {
    17.  
    18.              do {
    19.  
    20.              if( text.find( findString, 0) != string::npos) {
    21.                  text = text.replace( iPos, findString.length(), replaceString);
    22.                  cout << "Der veraenderte String sieht nun so aus: "<< text<<endl;
    23.                  break;
    24.                  }
    25.              else{
    26.                  cout<< "Das gesuchte wort gibt es nicht" <<endl;
    27.                  return false;
    28.                  
    29.                  
    30.              }
    31.                  }while( true );
    32.              
    33.              
    34.              
    35.              return 0;
    36.          
    37.      }
  2. theSmurf

    theSmurf Grünschnabel

    Wie schauts denn aus wenn du das true aus der schleife gegen eine Variable des Typ bool tauscht z.B. bool gefunden =true;
    in dem if Zweig in dem du nun den String tauscht setzt du "gefunden" auf true, dadurch wird die Schleife wiedeholt, in dem else setzt du "gefunden" auf false und die Schleife wird nicht weiter durchlaufen.

    Code (Text):
    1.  
    2.           bool gefunden=true;
    3.           do {
    4.  
    5.              if( text.find( findString, 0) != string::npos) {
    6.                  text = text.replace( iPos, findString.length(), replaceString);
    7.                  cout << "Der veraenderte String sieht nun so aus: "<< text<<endl;
    8.                  gefunden=true;
    9.                  }
    10.              else{
    11.                  cout<< "Das gesuchte wort gibt es nicht" <<endl;
    12.                  gefunden=false;
    13.                  
    14.                  
    15.              }
    16.                  }while( gefunden);
    Solgane er jetzt einen String zum austauschen findet durchläuft er die Schleife. Wenn nichts mehr da ist was er austauschen soll, wird die Schleife beendet.

    Hoffe ich konnte dir helfen.

    mfg

    Smurfy
    Zuletzt bearbeitet: 11. Juni 2006
  3. blotte

    blotte Grünschnabel

    ...Ne, so läuft es auch nicht besser...ich habe das gefühl, dass die schleife nicht mehrmals durchlaufen wird

    ich hab mein programm nochmal ein wenig umgestellt:

    Code (Text):
    1. bool gefunden = true;
    2.          
    3.          //for ( l = 0; l <= text.length(); l++) {
    4.  
    5.              do {
    6.                  iPos = text.find( findString, 0);
    7.                  sNeu = text.replace( iPos, findString.length(), replaceString);
    8.                  sNeu = text;
    9.  
    10.              if( text.find( findString, 0) != string::npos) {
    11.                  
    12.                  cout << "Der veraenderte String sieht nun so aus: "<< text <<endl;
    13.                  gefunden = true ;
    14.                  break;
    15.                  }
    16.              else{
    17.                  cout<< "Das gesuchte wort gibt es nicht" <<endl;
    18.                  gefunden = false;
    19.                  
    20.                  //return true;
    21.                  }
    22.              }while( gefunden );
    23.              
    24.               cout << "Der veraenderte String sieht nun so aus: "<< text <<endl;
    25.              
    26.              return 0;
  4. RedWing

    RedWing Erfahrenes Mitglied

    Hallo,
    dein Code funktionierte deswegen nicht weil du gleich beim ersten Treffer
    mit deiner Schleife abbrichst.

    Deinen Code etwas verändert koennte es so gehen:
    Code (C++):
    1. #include <iostream>
    2. #include <string>
    3.  
    4. using namespace std;
    5.  
    6. int main(){
    7.     string text = "";
    8.     string findString = "";
    9.     string replaceString = "";
    10.     int repetition = 0;
    11.     string::size_type iPos = 0;
    12.     cout << "Bitte geben Sie einen Text ein: " ;
    13.     getline(cin, text);
    14.     cout << "Welches Wort moechten sie aendern? ";
    15.     getline(cin, findString);
    16.     cout << "Welches Wort soll stattdessen eingefuegt werden? ";
    17.     getline(cin, replaceString);
    18.     while((iPos = text.find( findString, iPos++)) != string::npos){
    19.         text = text.replace( iPos, findString.length(), replaceString);
    20.         repetition++;
    21.     }
    22.     if(repetition)
    23.         cout << "Der veraenderte String sieht nun so aus: "<< text<<endl;
    24.     else
    25.         cout<< "Das gesuchte wort gibt es nicht" <<endl;
    26.     return 0;
    27. }
    28.  
    P.S. Ein Debugger hilft bei sowas manchmal Wunder ;)

    Gruß,

    RedWing
    Zuletzt bearbeitet: 12. Juni 2006

Diese Seite empfehlen