ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
1437
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    blotte ist offline Mitglied Bronze
    Registriert seit
    Mar 2006
    Beiträge
    39
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    cout << "Bitte geben Sie einen Txt ein: " ;
               getline(cin, text);
     
              
           cout << "Welches Wort moechten sie aendern? " << endl;
      
           getline(cin, findString);
               // liefert Position, ansonsten string::npos, wenn nicht gefunden
               iPos = text.find( findString, 0);
     
               cout << "Welches Wort soll stattdessen eingefuegt werden? " << endl;
           getline(cin, replaceString);  
         
             //boolean wortErsetzen() {
             
             //for ( l = 0; l <= text.length(); l++) {
     
                 do {
     
                 if( text.find( findString, 0) != string::npos) {
                     text = text.replace( iPos, findString.length(), replaceString);
                     cout << "Der veraenderte String sieht nun so aus: "<< text<<endl;
                     break;
                     }
                 else{
                     cout<< "Das gesuchte wort gibt es nicht" <<endl;
                     return false;
                     
                     
                 }
                     }while( true );
                 
                 
                 
                 return 0;
             
         }
     

  2. #2
    theSmurf ist offline Rookie
    Registriert seit
    May 2004
    Beiträge
    8
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
              bool gefunden=true;
              do {
     
                 if( text.find( findString, 0) != string::npos) {
                     text = text.replace( iPos, findString.length(), replaceString);
                     cout << "Der veraenderte String sieht nun so aus: "<< text<<endl;
                     gefunden=true;
                     }
                 else{
                     cout<< "Das gesuchte wort gibt es nicht" <<endl;
                     gefunden=false;
                     
                     
                 }
                     }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
    Geändert von theSmurf (11.06.06 um 16:24 Uhr)
     

  3. #3
    blotte ist offline Mitglied Bronze
    Registriert seit
    Mar 2006
    Beiträge
    39
    ...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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    bool gefunden = true;
             
             //for ( l = 0; l <= text.length(); l++) {
     
                 do {
                     iPos = text.find( findString, 0);
                     sNeu = text.replace( iPos, findString.length(), replaceString);
                     sNeu = text;
     
                 if( text.find( findString, 0) != string::npos) {
                     
                     cout << "Der veraenderte String sieht nun so aus: "<< text <<endl;
                     gefunden = true ;
                     break;
                     }
                 else{
                     cout<< "Das gesuchte wort gibt es nicht" <<endl;
                     gefunden = false;
                     
                     //return true;
                     }
                 }while( gefunden );
                 
                  cout << "Der veraenderte String sieht nun so aus: "<< text <<endl;
                 
                 return 0;
     

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    1.707
    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 cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main(){
        string text = "";
        string findString = "";
        string replaceString = "";
        int repetition = 0;
        string::size_type iPos = 0;
        cout << "Bitte geben Sie einen Text ein: " ;
        getline(cin, text);
        cout << "Welches Wort moechten sie aendern? ";
        getline(cin, findString);
        cout << "Welches Wort soll stattdessen eingefuegt werden? ";
        getline(cin, replaceString);
        while((iPos = text.find( findString, iPos++)) != string::npos){
            text = text.replace( iPos, findString.length(), replaceString);
            repetition++;
        }
        if(repetition)
            cout << "Der veraenderte String sieht nun so aus: "<< text<<endl;
        else
            cout<< "Das gesuchte wort gibt es nicht" <<endl;
        return 0;
    }

    P.S. Ein Debugger hilft bei sowas manchmal Wunder

    Gruß,

    RedWing
    Geändert von RedWing (12.06.06 um 01:16 Uhr)
     
    "I'm not deaf, I'm ignoring you"
    ----

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 30.09.09, 19:31
  2. mehrere mySQL-Abfragen in einem String
    Von Dac-XP im Forum PHP
    Antworten: 4
    Letzter Beitrag: 05.11.07, 18:53
  3. Mehrer Wörter in einem String ersetzen
    Von Imion im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 16.06.06, 20:20
  4. Antworten: 1
    Letzter Beitrag: 03.10.04, 22:22
  5. Wörter von einem String suchen,.....
    Von Nucleus im Forum PHP
    Antworten: 4
    Letzter Beitrag: 28.03.03, 13:00