c++ - 在 C++ 中解析字符串以分配参数

标签 c++ string parsing boost

<分区>

Possible Duplicate:
How do I tokenize a string in C++?

我有一个如下形式的字符串,这是一个用户输入。

a1 10.2 lib_t 50 sv 60 输出“真”

这里,a1是一个double类型的参数,它的值为10.2。同样,lib_t = 50sv = 60out = 'true' 是一个字符串。

此输入可以按任何顺序指定..例如lib_t 50 a1 10.2

单词之间的空格可能会有所不同。

编辑: Boost tokenizer 可以处理这个。我已经写了必要的代码。但我想看看是否有任何其他标准方法可以在不使用 boost 库的情况下处理这个问题。

输入很短。我不太关心这里的效率(很抱歉在我最初的编辑中使用了“高效”这个词)。

最佳答案

#include <sstream>
#include <ostream>
#include <istream>
#include <string>
#include <stdexcept>

int main() {
    std::string parameters = "a1 10.2 lib_t 50 sv 60 out 'true'";

    std::stringstream ss(parameters);
    std::string param;
    double a1;
    int libt; //names ending in _t are not allowed
    short sv;
    std::string out;
    while( ss >> param) {
        if (param == "a1")
            ss >> a1;
        else if (param == "lib_t")
            ss >> libt;
        else if (param == "sv")
            ss >> sv;
        else if (param == "out")
            ss >> out;
        else {
            std::stringstream err;
            err << "unknown parameter type: \"" << param << "\"";
            throw std::runtime_error(err.str());
        }
        if (!ss) {
            std::stringstream err;
            err << "error parsing parameter: \"" << param << "\"";
            throw std::runtime_error(err.str());
        }
    }
}

http://ideone.com/zz1r8

可以编写更优化的代码,但会复杂得多,而这相当快速且简单。并内置了所有错误检查功能。

关于c++ - 在 C++ 中解析字符串以分配参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434843/

相关文章:

c++ - QImage::fill(Qt::red) 总是黑色?

python - 在空格或连字符上拆分?

c++ - basic_string 文字在编译时速度更快还是处理得更好?

python - 将字符串中的日期与今天的日期进行比较

javascript - 使用 RegExp 和 exec 在 JavaScript 中解析 XML - 它通常可以工作,但在少数情况下却不能 - 知道为什么吗?

c++ - 使用/分隔符获取给定字符串的最后一个目录的文本

c++ - 使用 CImg 对单 channel 进行复杂修改

c++ - 自 C++11 以来,volatile 在并发编程中的用处

c - 在 c 中使用将作为字符串给出的版本号解析为 4 个不同的整数

c++ - 是否有任何关于 Windows NT Native API 的最新书籍或网站?