Vectoren sortieren, Zahlen erkennen



  • Ich hätte den Regex so gemacht:

    if (!std::getline(is, str, ';')) // der Regex kümmert sich um Leerzeichen drum rum
          return is;
    
        // \d: [0-9], \s: [[:space:]], +?: Non-greedy matching, ^ und $: alles anschauen, keinen Substring suchen
        static const std::regex reg(R"(^\s*(.+?)(\s+s(\d+)e(\d+))?(\s*/final)?\s*$)");
        std::smatch match;
        if (!std::regex_match(str, match, reg))
          assert(false); // always matches
    

    Dein Regex schlägt fehl bei z.B. "prison s4e24 break s4e24;".



  • Hier noch der Rest vom Code:

    s.name_ = match[1];
    
        if (match[2].matched) {
          s.staffel_ = std::stol(match[3]);
          s.episode_ = std::stol(match[4]);
        } else {
          s.staffel_ = s.episode_ = 0;
        }
        s.final_ = match[5].matched;
    
        return is;
    


  • Geht bei mir gar nicht.
    Er findet die Namen der Serien nicht. Außerdem verstehe ich dein Regex nicht wirklich "(^\s*(.+?)" was macht das?
    Was bewirkt das Doller Zeichen?
    Mit den assert bekomme ich ein Laufzeit Fehler:

    File: main.cpp, Line 41
    
    Expression: false
    

    Line 41:

    assert(false); // always matches
    

    "prison s4e24 break s4e24;"

    So ein Format sollte nicht vorkommen.

    if (!std::getline(is, str, ';')) // der Regex kümmert sich um Leerzeichen drum rum

    Hab vergessen zu sagen das nach den ';' Kommentare kommen.

    Trotzdem Danke.


Anmelden zum Antworten