将const char *转换为vector <double>更好的方式</double>

时间:2014-08-22 18:24:00

标签: c++ type-conversion

我通过UDP收到const char*。该文本的大小各不相同(即不是固定大小)。此文本具有double类型的值。我想将其转换为vector<double>。这就是我所做的。

std::vector<double> convertToDoubVect(const char * buff)
{
    std::vector<double> vec;
    std::istringstream data(buff);

    int i = 0, count = 0;

    // get number of doubles in const char* by incrementing count
    while( buff[i] != '\0' )
    {
        if ( buff[i] == ' ')
            ++count;
        ++i;
    }

    // allocate an array for the total doubles
    double *n = new double[count+1];

    // convert const char* to vector<double>
    for ( int i(0); i <= count; ++i)
    {
        data >> n[i];
        vec.push_back(n[i]);
    }

    delete n;

    return vec;
}

int main()
{

    const char *doubStr = "2.3 4.3 5.6 2.1 4.4 3.1";
    std::vector<double> vec = convertToDoubVect(doubStr);

    for ( int i(0); i < vec.size(); ++i)
    {
        std::cout << vec[i] << std::endl;
    }

    return 0;
}

这绝对不是一种优雅的方式,但它确实可以解决问题。有什么建议!我正在使用visual studio 2010.

2 个答案:

答案 0 :(得分:13)

#include <sstream>
#include <vector>
#include <iterator>

const char* doubStr = "2.3 4.3 5.6 2.1 4.4 3.1";
std::istringstream iss(doubStr);
std::istream_iterator<double> it(iss), end;
std::vector<double> v(it, end);

Demo.

答案 1 :(得分:3)

我同意@cdhowie的评论。尽管如此,double *n = new double[count+1];似乎是无关紧要的。不要在这里分配并稍后删除数组;只需使用标量。

整个转换循环可能是

// convert const char* to vector<double>
for ( int i(0); i <= count; ++i)
{
    double n;
    data >> n;
    vec.push_back(n);
}