2016-04-21 7 views
2

Ich versuche, eine Liste von Zahlen zu trennen, wie: 34,45,12.3,100,34.6,50durch Kommata getrennte Schwimmer in C++

Ich kann es nur tun, wenn es keine Dezimalzahlen wie diese sind:

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

int main() 
{ 
    std::string str = "34,45,12.3,100,34.6,50"; 
    std::vector<int> vect; 

    std::stringstream ss(str); 

    int i; 

    while (ss >> i) 
    { 
     vect.push_back(i); 

     if (ss.peek() == ',') 
      ss.ignore(); 
    } 

    for (i=0; i< vect.size(); i++) 
     std::cout << vect.at(i)<<std::endl; 

} 

Das Problem hier ist mit den Dezimalstellen. Die oben erzeugt:

34 45 12 3 100 34 6 50 

während sie produzieren sollte:

34 45 12.3 100 34.6 50 

grundsätzlich den obigen Code, wenn es einen Punkt sieht '.' es wirkt, als wäre es ein Komma war.

Irgendwelche Ideen?

+4

Sie haben einen Vektor von 'int' als Integer, daher kann er keine Fließkommazahl enthalten; Sie werden auf den ganzzahligen Teil gekürzt. Ändern Sie Ihren Vektor so, dass seine Elemente Fließkommazahlen sind. –

+1

'i' sollte ein' float' sein. – Chnossos

+0

Dies ist ein Duplikat von http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files-in-c (aber aus irgendeinem Grund denke ich nicht, es als zu markieren so, und es zu schließen, wäre richtig, hier). –

Antwort

1

Ich denke, dass Ihr Code 12.3 als zwei verschiedene Zahlen interpretiert, weil Sie diese Zahl nicht als Float deklariert haben. Ihr Vektor enthält alle Zeichenfolgen als Ganzzahlen und nicht als Gleitkommazahlen. Wenn Sie Ihre Vektoren deklariert als anstelle von ganzen Zahlen schwimmt, dann sollte Ihr Problem

2

gelöst werden sollten Sie einen Schwimmer verwenden und den Code ändern float statt int zu verwenden:

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

int main() 
{ 
    std::string str = "34,45,12.3,100,34.6,50"; 
    std::vector<float> vect; 

    std::stringstream ss(str); 

    float i; 

    while (ss >> i) 
    { 
     vect.push_back(i); 

     if (ss.peek() == ',') 
     ss.ignore(); 
    } 

    for (i=0; i< vect.size(); i++) 
    std::cout << vect.at(i)<<std::endl; 

} 
2

sollten Sie float i erklären statt int i und deklarieren Sie den Vektor als Vektor von Floats anstelle eines Vektors von ganzen Zahlen. Dies liegt daran, dass 12.4 keine Ganzzahl, sondern ein Gleitkomma ist.

Verwandte Themen