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.


Log in to reply