2016-04-21 64 views
2

我試圖分開的數字,如列表:34,45,12.3,100,34.6,50以逗號分隔的花車在C++

我能做到這一點只有當有這樣的沒有小數:

#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; 

} 

這裏的問題是小數。上面的代碼將產生:

34 45 12 3 100 34 6 50 

,同時它應該產生:

34 45 12.3 100 34.6 50 

基本上,當它看到一個點'.'它的作用就像是一個逗號上面的代碼。

任何想法?

+4

你有一個'int'的向量,如整數,因此它不能保存浮點數;它們會被截斷爲整數部分。改變你的向量,使它的元素是浮點數。 –

+1

'我'應該是'浮動'。 – Chnossos

+0

這是http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files-in-c的重複(但由於某種原因,我不認爲它標記爲這樣,並關閉它,在這裏是正確的)。 –

回答

1

我認爲您的代碼將12.3解釋爲兩個不同的數字,因爲您尚未將該數字聲明爲浮點數。你向量將所有的字符串保存爲整數,而不是浮動。如果你宣佈你的向量作爲漂浮而不是整數,那麼你的問題應該得到解決

2

你應該用一個浮點數,改變代碼,使用浮動不是int:

#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

你應該申報float i代替int i並將該向量聲明爲一個向量,而不是一個整數向量。這是因爲12.4不是一個整數,而是一個浮點數。