std::string --> Alle Zeichen zwischen '<' und '>' entfernen ?!
-
Hallo,
in meinem String steht Html-Code:
Beispiel:<a style"..." blabla> Klick </a>(Nicht nur ein Zeile sondern jede MENGE Codes)
Jetzt würde ich gerne alle Tags löschen, nur das soll übrig bleiben was man auch normalweise im Browser sieht also der Text.
Gibt es was von der stl, womit ich einfach alles zw. '<' und '>' löschen kann.
-
Klar schau dir doch die Member von std::string an:
std::string::find (_first_of / _first_not_of)
std::string::eraseDas sollte schon reichen!
Gruß
-
Ja so bin ichs schon die ganze Zeit am Testen...
Ich suche mir mit find_first_of('<') und find_first_of('>') die position beider zeichen.
Dann lösche ich es mit erase, aber das haut momentan noch nicht so ganz hin.
Ich werds mal bissl weiter versuchen und wenns wieder nicht richtig funktionieren sollte schreibe ich den Code mal hierhin
-
Was haut nicht so ganz hin? Wenn am Ende überschüssige Zeichen zurückbleiben oder "gültige" Zeichen gelöscht werden, mußt du den Index für erase etwas verschieben:
while(true) { int start=text.find('<');//findet erstes < int ende=text.find('>',start+1);//findet erstes > hinter Position start if(start==string::npos||ende==string::npos) break; text.erase(start,ende+1);//löscht alle Zeichen zwischen start und ende (einschließlich) }
-
Hi, genauso ähnlich hab ichs auch:
string daten = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"></html><head><title>Lalla</title><META NAME=\"description\" CONTENT=\"Lööö\"><META NAME=\"keywords\" CONTENT=\"fgfg,fgfdg,fdgfdgd,dfgfg,fgfg>"; int left = 0,right = 0; while(1) { left = daten.find_first_of('<'); right = daten.find_first_of('>',left+1); if( (right == string::npos) || (left == string::npos) ) break; daten.erase(left,right+1); cout <<daten<<endl<<endl; }Leider funktioniert das nicht ganz auf den gewünchten String ???
-
Ich habe gerade mal andere daten getestet und gemerkt das es desöfteren bei den "-Zeichen hackt, ich habe vor alle ein \ natürlich gemacht.
Aber komischerweise funkioniert das hier auch nicht richtig:
string daten = "<A><afdf>gfg</sd><g>Gui</sf><f>54<fh>";Ausgabe:
<A><afdf>gfg</sd><g>Gui</sf><f>54<fh> <afdf>gfg</sd><g>Gui</sf><f>54<fh> gfg</sd><g>Gui</sf><f>54<fh> gfgGui</sf><f>54<fh> gfgGuifh>Irgendwas mache ich noch falsch

-
Sorry, mir ist gerade ein Fehler in meinem oberen Code aufgefallen - string::erase erwartet als zweiten Parameter die Länge des Bereiches, der gelöscht werden sollte, also
daten.erase(left,right+1-left);
-
Ohhh

stimmt ja. Danke
Ich hatte irgendwie im Kopf das ich den Bereich angeben muss
