如何在C ++中将字符串转换为双精度?

时间:2018-09-25 22:31:03

标签: c++

我已尝试使用atof()(我认为还很遥远)和stringstream。我觉得stringstream是答案,但我对此并不熟悉。根据一些Google搜索,YouTube视频以及一段时间在cplusplus.com上的了解,我的语法如下所示。我正在从.csv文件中提取数据,并尝试将其放入std::vector<double>中:

while (file.good() )
    {
    getline(file,line,',');
    stringstream convert (line);
    convert = myvector[i];
    i++;
    }

1 个答案:

答案 0 :(得分:1)

如果您正在从流(文件)中读取双打,则可以简化以下操作:

Cells

With将从流中读取为所需的类型,并自动进行转换(如果存在转换)。

如果每一行都有更多信息,则可以使用Dim LRow as Long With ThisworkBook.Sheets("????") LRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("C2:AX5330").Formula = "=INDEX($A2,MATCH(D$1,$B2,0))" 'Make sure your cell references are correct here .Range("C2:AX5330").Value = .Range("C2:AX55330").Value 'Place as values instead of formula End With 作为中间字符。就像一个单词一样,是整数和双精度数。

double  value;
while(file >> value) {
    myvector.push_back(value);
}

但是,如果每行只有一个数字,那就太过分了。

现在让我们看一下operator>>文件。
这是基于行的文件,但是每个值都用stringstream分隔。因此,在这里您将读取一行,然后在该行上循环并读取值,后跟逗号。

std::string line;
while(std::getline(file, line)) {
    std::stringstream lineStream(line);

    std::string word;
    int         integer;
    double      real;

    lineStream >> word >> integer >> real;
}

不要在while条件下对csv进行测试。
Why is iostream::eof inside a loop condition considered wrong?

也值得一读: How can I read and parse CSV files in C++?