Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Konvertieren von vector<string> nach vector<double>

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
14.08.2007, 16:45 Uhr
~Elbarto
Gast


Hi,

hat jemand eine Ahnung wie ich einen Vektor , bestehend aus mehreren Zahlen im "String" Format in einen Vektor im "Double"-Format umwandle?

thx
bart
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.08.2007, 16:52 Uhr
Blubber2063



Na neuen Vector<double> erzeugen, und dann inner Schleife über den String Vektor iterieren und jedesmal string auf den stringstream schieben und dann nen double aus dem stringstream lesen und auf den double vector pushen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.08.2007, 17:29 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.08.2007, 18:14 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>

double convert_string(std::string const &s) {
  std::istringstream isstr;
  double result = 0.0;

  isstr.str(s);
  isstr >> result;

  return result;
}

int main() {
  std::vector<std::string> numbers_s;
  std::vector<double> numbers_d;

  numbers_s.push_back("1.1");
  numbers_s.push_back("2.2");
  numbers_s.push_back("3.3");
  numbers_s.push_back("4.4");

  std::transform(numbers_s.begin(),
                 numbers_s.end(),
                 std::back_inserter(numbers_d),
                 convert_string);

  std::copy(numbers_d.begin(),
            numbers_d.end(),
            std::ostream_iterator<double>(std::cout, "\n"));
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.08.2007, 18:15 Uhr
~Elbarto
Gast


@Blubber2063

das funktioniert nicht, ich kann einen String aus einem Vektor nicht auf einen stringstream schieben. Mein Programm sieht folgendermaßen aus:


#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>

vector<string> data;
stringstream Buffer;
double data_double;

.
.
.

for (int i=0;i<data.sizeof();i++) {
Buffer << data[i];
Buffer >> data_double;
cout << data_double << endl;
}

"data_double" ist bei mir immer 0, obwohl der Vektor "data" zahlenwerte wie (12.344 1.001 45.322 ...) enthält.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.08.2007, 21:53 Uhr
xXx
Devil



C++:
data.sizeof();
wtf?

C++:
for (std::vector<std::string>::iterator it = data.begin(); it != data.end(); ++it)
{
    Buffer.str("");
    Buffer.clear();
    Buffer << *it;
    Buffer >> data_double;
    std::cout << data_double << std::endl;
}

Aber beefys Version geht da auch?! und die ist wesentlich schöner! WESENTLICH ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.08.2007, 14:57 Uhr
~elbarto
Gast


@Oxdeadbeef

Danke für die Hilfe. Es funktioniert!
Hab allerdings ein weiteres Problem. Die "double" werte werden nach der 6. Stelle abgeschnitten. Ich muss Zahlen mit 10 Stellen einlesen (z.B. 3467820.129). Ich bekomme als Ergebnis 3.46782e+006.
Hat jemand ne Idee woran das liegen könnte?

Danke schon mal im vorraus
Elbarto
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.08.2007, 15:23 Uhr
xXx
Devil


www.cplusplus.com/reference/iostream/ios_base/precision.html durchlesen und verstehen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.08.2007, 22:02 Uhr
0xdeadbeef
Gott
(Operator)


Der liest die schon richtig ein, keine Angst. Bis zu 15 Stellen auf einer 32bit-Architektur jedenfalls.

Versuch mal, bei der Ausgabe folgendes zu benutzen:

C++:
#include <iomanip>
#include <iostream>

// ...

std::cout << << std::setprecision(10) << 0.12345678901234 << std::endl;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 20.08.2007 um 22:02 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.08.2007, 13:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von 0xdeadbeef:
Bis zu 15 Stellen auf einer 32bit-Architektur jedenfalls.


Auch wenn 15 Stellen nicht gleich 15 Nachkommastellen bedeutet (siehe IEEE-Beschreibung von Fließkommavariablen).
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: