strings auseinander nächmen
-
Hallo,
kann mir jemand einen typ geben wie ich ein string teilen kann.
ich habe eine datei aus der ich strings auslesse die ungefär so aussechen:
220 66010.0 1994 11 19.5 18 3.50 14 /
5.46 5.01 4.80 4.54 4.54 4.43 4.08 3.84 3.74 3.84 /
...ich lesse die zeilen wiese aus nun muss ich die einzelnen zahlen haben wie bzw. mit welcher funktion mach ich das?
MFg TaccoGo
-
Hallo,
ich würde das mit Stringstreams machen. Sieh mal hier:
http://www.c-plusplus.net/forum/viewtopic.php?t=78596
-
char * buffer; char * zahlen; zahlen = strtok(buffer," "); //tu was mit der ersten zahl(konvertieren z.B string -> double) while(zahlen = strtok(0," ")) { //tu was mit den anderen zahlen }
Wie du die Char* in double oder int umwandelst steht in der faq
Gruß
-
so ist das nicht schlecht aber da die dateien nicht von mir sind habe ich das zwischen den zahlen manchmal 3Leerzeichen sind und manchmal 2Leerzeichen oder 4Leerzeichen.
wie kann ich das algemmeiner?
oder wie überhaupt?MFG TaccoGo
-
Hallo electron_1,
ich hatte deinen post noch nicht gesehen.
damit get es.
Danke.
MFG TaccoGo
-
Auch möglich wäre
std::string str("12 13.5 16 37.78 34"); std::string::const_iterator start,stop; start=str.begin(); stop=str.end(); boost::smatch m; boost::regex ex("[0-9]+(\\.[0-9]+)?"); std::vector<float> numbers; typedef std::ostream_iterator<float, char,std::char_traits<char> > citer; while(boost::regex_search(start,stop,m,ex,boost::format_perl|boost::match_default)){ numbers.push_back(boost::lexical_cast<float>(std::string(m[0].first,m[0].second))); start=m[0].second; } std::copy(number.begin(),numbers.end(),citer(std::cout," "));
Asugabe:
12 13.5 16 37.78 34Aber vll wie mit Kanonen auf Spatzen.
-
@prolog
Das ist ja Pervers! da gibts in boost sowas krasses was sich tokenizer nennt, und du gehst da mit so einem biest ran.hier mal mit tokenizer:
#include<iostream> #include<boost/tokenizer.hpp> #include<string> using namespace std; using namespace boost; int main(){ string s = "12 13.5 16 37.78 34"; boost::char_separator<char> sep(" "); tokenizer<char_separator<char> > tok(s,sep); for(tokenizer<char_separator<char> >::iterator beg=tok.begin(); beg!=tok.end();++beg){ cout << *beg << "\n"; } }
-
gg ich sag ja mit Kanonen auf Spatzen
[edit] Bei aller Ironie hab ich vergessen zu erwähnen, dass deine Lösung natürlich die bessere Lösung ist. Also jetzt mal als Info für den Originalposter [/edit]
-
wenn wir grad dabei sind kann man das hier auch irgendwie lösen? ->http://www.c-plusplus.net/forum/viewtopic.php?t=88307