解析包含逗号的ASCII值

时间:2014-08-27 03:48:18

标签: c++ parsing

我有一个ascii unsigned char *值,其值如下:

"1.657e-01,4.8552e-01,8.7585e-01"

我想解析此值并将此值转换为3 double个值 目前我正在做一个漫长的过程:

  1. 将此值转换为字符串字符串temp_S(reinterpret_cast<char *>(ascii_value));
  2. 查找,的所有匹配项,然后创建子字符串。
  3. 使用stod函数将这些子字符串转换为double。

    • 这是正确而安全的方法吗?
    • 是否还有其他方法可以直接解析并将值转换为从ASCII加倍?

2 个答案:

答案 0 :(得分:2)

来自strtod()

<stdlib.h>返回带有解析值和指向值文本后面的下一个字符的指针。您可以围绕它进行循环,strspn()可以跳过逗号。

答案 1 :(得分:1)

由于您提到reinterpret_cast<>,我假设您实际上有一个C ++编译器。

#include <iostream>
#include <vector>
#include <sstream>
using namespace std;

int main() {
    string s("1.657e-01,4.8552e-01,8.7585e-01");
    vector<double> data;
    for (istringstream iss(s); ; ) {
        double x;
        iss >> x;
        if ( ! iss) {
            cout << "Parse error" << endl;
            break;
        }
        data.push_back(x);
        char comma = 0;
        iss >> comma;
        if ( ! iss)
            break;
        if (',' != comma) {
            cout << "What is [" << comma << "]?" << endl;
            break;
        }
    }

    cout << "Parsed " << data.size() << " pieces of data" << endl;
}