001
17.11.2007, 14:45 Uhr
0xdeadbeef
Gott (Operator)
|
Kommt ein bisschen drauf an. Wenn du genau weißt, wie viele Werte in deinem String sind, kannst du einfach
C++: |
#include <cstdlib> #include <string>
// ...
std::string str = "1.2,3.4,5.6"; double x, y, z;
if(std::sscanf(dein_string.c_str(), "%g,%g,%g", &x, &y, &z) == 3) { // Erfolg! }
|
schreiben. Wenn du aber z.B. eine Liste von Zahlen aus einer Datei einlesen willst...naja, das mit den Kommas ist ein bisschen Gefummel, mit Leerzeichen wärs einfacher . Zum Beispiel:
C++: |
#include <fstream> #include <sstream> #include <string> #include <vector>
// ...
std::ifstream in("zahlen.dat"); std::string zahl_str; std::vector<double> zahlen;
while(std::getline(in, zahl_str, ',')) { std::istringstream parser; double zahl;
parser.str(zahl_str); if(parse >> zahl) { zahlen.push_back(zahl); } else { // Lesefehler } }
|
Wenn du das Format so anpassen kannst, dass Leerzeichen statt Kommas da drinstehen, kannst du auch die Standardalgorithmen verwenden. Zum Beispiel
C++: |
#include <algorithm> #include <fstream> #include <iterator> #include <vector>
// ...
std::ifstream in("zahlen.dat"); std::vector<double> zahlen;
std::copy(std::istream_iterator<double>(in), std::istream_iterator<double>(), std::back_inserter(zahlen));
|
...bzw.
C++: |
#include <algorithm> #include <sstream> #include <iterator> #include <vector>
// ...
std::istringstream in("1.2 2.3 3.4 4.5 5.6 6.7"); std::vector<double> zahlen;
std::copy(std::istream_iterator<double>(in), std::istream_iterator<double>(), std::back_inserter(zahlen));
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |