Possible Duplicate:
How do I tokenize a string in C++?
我有一个如下形式的字符串,这是一个用户输入。
a1 10.2 lib_t 50 sv 60 输出“真”
这里,a1
是一个double
类型的参数,它的值为10.2
。同样,lib_t
= 50
,sv
= 60
和 out
= '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
可以编写更优化的代码,但会复杂得多,而这相当快速且简单。并内置了所有错误检查功能。