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.