sonderzeichen in string == replace,find...



  • Hallo,

    wenn ich einen string habe mit sonderziechen, dann zeigt er bei find die falsche position.

    z.b

    do {
                anfang=string.find("<",0);
                ende=string.find(">",0);
      if(anfang != string::npos && ende != string::npos) { string.erase(anfang,ende);} else { break;};
    
          } while(anfang == string::npos || ende == string::npos);
    

    wenn er diese schleife durch geht, kommt nicht die postion des < heraus sondern die postion des : (doppeltpunkt).
    Das selbe hatte ich auch schon mit andere sonderzeichen.

    brauche ich da eine sonderform oder warum gibt er mir die falsche postion an, ich habe auch versucht mit '<', char(60) bringt alles nichts.

    mfg
    Bully



  • find() sollte richtig arbeiten. Aber der zweite Parameter bei erase() ist nicht die Endposition, sondern die Länge des zu löschenden Stringausschnitts.



  • Hi,
    ich glaube eher nicht, das dir find die falsche Position zurueckgibt. Dein Code wird eher fehlerhaft sein.
    Hier mal eine andere Version die vielleicht das gleich tut 😃 (Problem ist ich weiss nicht exakt was getan werden soll)

    string str("lassedas<loeschedas>behaltedas");
    	string::size_type anfang = 0;
    	string::size_type ende = 0;
    
    	do
    	{
    		anfang = str.find("<",0);
    		if (anfang != string::npos)
    		{
    			ende = str.find(">",0);
    
    			if(ende != string::npos)
    				str.erase(anfang, ende - anfang + 1);
    		}
    	}
    	while (anfang != string::npos && ende != string::npos);
    
    	cout << str;
    

    Knackpunkt ist, dass string::erase im zweiten Parameter nicht die Position des letzten zu loeschenden Zeichens erwartet, sondern die Anzahl der Zeichen ab dem ersten Parameter.

    Gruss,
    DeSoVoDaMu


Anmelden zum Antworten