Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C++ String teilen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.11.2007, 14:00 Uhr
HansGeorg



Hallo,

ich hab bislang immer nur in C programmiert. Das war auch nicht so schwer. Ich hatte da diese Funktion benutzt sscanf, damit habe ich diesen String geparst:

2.84943,3.88744,-18.7371

sozusagen ein Bündel voller Floats die hab ich dann in Variablen eingelesen. Jetzt würd ich das ganze jedoch gerne in Cpp machen, aber anscheinend gibts da keine möglichkeit das so direkt zu machen. Wie teile ich jetzt diesen String in 3 Float Variablen auf?

Ich habe was von einem Stringstream gelesen, damit soll es gehen, aber wie genau steht nirgendwo.

Ich hoffe Ihr könnt mir helfen.

Gruß

Georg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: