string finden und ersetzen geht nicht

wie geht dass den genau mit dem löschen?..ich sietz seit bestimmt 8 stunden an dem scheXXX und komm nicht mehr weiter und ich muss ers morgen abegeben..es sah am anfang für mich leichter aus als es ist

nein die wörte müssen vorhande beliben..ich will ja bestimmte wörter ersatzt haben..oder wie meinst du ändern?

Code:
	{
	string::size_type i;
    while ((i=s.find(u)) != string::npos)  // solange wort in s vorkommt
	{s.erase( i, u.size());
		s.insert( pos, z);
	}
		//s.replace (i, u.size(), z);                // durch Ersatzwort ersetzen
    return s;
	}


ich stelle mir das so ungefähr vor...aber wie gaht das genauer in meinem fall?
 
Zuletzt bearbeitet:
Naja du durchsuchst die komplette Zeile so wie dus bisher gemacht
hast, und speicherst dir die Positionen an denen die gesuchten Werte
vorkommen in einem vector oder noch besser stack und löschst den
entsprechenden Wert mittels erase()...
Wenn du alle Werte gelöscht hast (nach der Schleife)
machst du solange noch positionen im stack bzw vector vorhanden sind
an diesen entsprechenden Positionen einen insert() mit deinem neuen
Wort...
Naja aber wenn das Gedicht reicht isses glaube auch so (statisch) ok...
Wegen der zwei Zeilen ich glaube das könnte daran liegen:

Code:
                  if (Zeile.find(Orginal[i])!=string::npos)                                 // zensierte Zeile ausgeben:
           enthalten=Orginal[i];
                   ersatz=Ersatz[i];
                   e=1;
                  }


                  if (o=1)
                  {
                  cout << Zeile << endl;// Zeile ausgeben
                  o=0;
                  }

Das solltest du mit else if anstatt nur mit if abrfagen...

Gruß

RedWing
 
aber wenn ich es mit else if mache wie baue ich dann die schlefie mit rein dass er wirklich i++ hochzählt zum vergleichen
 
Hallo hab deinen Code mal etwas modifiziert das sollte es tun:

Code:
#include <iostream>
#include <string>
#include <fstream>
#include <stack>


using namespace std;
   


string Orginal[6]={"die","der","ist","ich","Du","Dir"};
string Ersatz[6]={"ersatzdie","ersatzder","ersatzist","ersatzich","ersatzDu","ersatzDir"};

string ersetze (string s, string u, string z);
	

   int main()
   {
    	
    string Zeile,nichtenthalten,enthalten,ersatz; 
	int i=0,e=0,o=0;
      
	ifstream datei("Eingabe.txt");  // Eingabestrom fin definieren und ver-
          // binden mit Datei, deren Name in der Stringvariablen Datei steht
      if (!datei)                                // Das hat nicht funktioniert
      {  cout << "Datei existiert nicht!" <<endl;
         exit(1);
      }
   
      //cin.ignore (80, '\n');          // evtl. Überbleibsel in cin entfernen
      //cout << "Bitte die verbotene Zeichenkette eingeben.\n";
      //string Unwort;
      //getline (cin, Unwort);
         
      while ( getline(datei, Zeile) )                  // nächste Zeile lesen
      {
		  string res = Zeile;
		  for (i=0;i<6;i++)
		  {
		  	if (Zeile.find(Orginal[i])!=string::npos){     // Wort nicht enthalten
		           enthalten=Orginal[i];
		           ersatz=Ersatz[i];
		           res = ersetze (res, enthalten, ersatz);
		  	}
		}
		cout << res << endl;
      }
      datei.close();
	  
	  
	
   return 0;
	
   }

   string ersetze (string s, string u, string z)
	{
	string::size_type i;
	stack<string::size_type> positions;
        while ((i=s.find(u)) != string::npos){  // solange wort in s vorkommt
	       s.erase(i,u.size());
	       positions.push(i);
	}
	while(!positions.empty())
	{
		s.insert(positions.top(), z);
		positions.pop();
	}
        return s;
}

Gruß

RedWing
 
Zuletzt bearbeitet:
Tach Superheftigmeischter..

Vielen vielen dank..ich war gestern schon auf dem richtigen weg..hatte es in die Richtung wie du es gemacht hast, aber um 2:30 konnte ich nach 9 Stunden einfach nicht mehr...
ich habe jetzt ein paar fehlenden sachen von Dir übernommen und es geht wunderbar...1000 dank nochmal!!

Schöne Güße
Uzo
 
Zurück