boost.tokenizer und string(s.c_str()) verschlucken einen Doppelpunkt.



  • guten Abend, ich habe folgenden Code, der funktioniert:

    #include <iostream>
    #include <boost/tokenizer.hpp>
    
    using namespace std;
    using namespace boost;
    
    int main(int argc, char** argv) {
        string tile_string("0:3:1|0:3:1|;-1:-1:-1|0:2:1|;");
        char_separator<char> column_separator(";");
        tokenizer<char_separator<char> > column_tokenizer(tile_string, column_separator);
        tokenizer<char_separator<char> >::iterator itr(column_tokenizer.begin());
        cout << "1:" << tile_string << endl;
        cout << "2:" << *(++itr) <<endl;
    }
    

    die Ausgabe lautet:

    1:0:3:1|0:3:1|;-1👎-1|0:2:1|;
    2👎-1:-1|0:2:1|

    soll auch so sein.
    nun modifiziere ich zwei Zeilen so, dass sie folgendermaßen lauten:

    string tile_string("0:3:1|0:3:1|;-1:-1:-1|0:2:1|;");
        char_separator<char> column_separator(";");
        tokenizer<char_separator<char> > column_tokenizer(string(tile_string.c_str()), column_separator); //hier
        tokenizer<char_separator<char> >::iterator itr(column_tokenizer.begin());
        cout << "1:" << string(tile_string.c_str()) << endl; //und hier
        cout << "2:" << *(++itr) <<endl;
    

    Die Ausgabe lautet nun

    1:0:3:1|0:3:1|;-1👎-1|0:2:1|;
    2:-1-1:-1|0:2:1|

    wie ihr sehen könnt ist bei 2 nach dem ersten -1 kein : mehr zu sehen.. wie kann das sein?

    edit: hat sich erledigt. Er scheint ein Problem mit dem temporären Charakter der Variable zu haben.


Anmelden zum Antworten