Abbruchbedingung gesucht...
-
Hey C++ler,
ich möchte, dass in einem string so lange nach einem Zeichen gesucht wird, bis alle gefunden wurden. Ich habe mir dazu folgendes überlegt:
string s = "<tag1>abc</tag1><tag2>abc</tag2>"; while(go) //Tags einlesen { pos1=s.find('<',StartPos); //Findet Position des ersten < pos2=s.find('>',StartPos); //Findet Position des ersten > if(pos2 || pos1 == -1){go=false;} //Abbruchbedingung: Wenn kein< oder kein > StartPos = pos2+1; }
Wenn die s.find() das Zeichen nicht mehr im String findet liefert sie -1 zurück.
Später beim auswerten, stelle ich fest, dass er nur die ersten beiden tags einliest , also nach "</tag1>" aufhört. Warum?
mfg Golfi
-
if(pos2 || pos1 == -1){go=false;}
sollte so sein
if((pos2==-1) || (pos1 == -1)) go=false;
-
Nimm lieber std::string::npos statt blanke -1. Die Schleife solltest du sofort verlassen, sobald entsprechende Bedingungen erfüllt sind (macht man i.d.R. mit break). In deinem Fall würde ich es aber so shreiben:
std::string s = "<tag1>abc</tag1><tag2>abc</tag2>"; do //Tags einlesen { pos1 = s.find('<', StartPos); //Findet Position des ersten < pos2 = s.find('>', StartPos); //Findet Position des ersten > StartPos = pos2+1; } while (pos2 != std::string::npos && pos1 != std::string::npos);
p.S. Hoffentlich hast StartPos mit 0 initialisiert.