如何拆分 std::string 以便填充结构对象的两个值。
q.Qcmd = "Command1"
q.timeValue = 1.0
这是示例代码。
struct QueueCommand
{
std::vector<std::string>QCmd;
std::vector<float>timeValue;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::string str = "command1|1.0"
std::string str1 = "command2|2.0"
QueueCommand q;
boost::split( q,str,boost::is_any_of("|")); // need to fill Qcmd and timevalue
boost::split( q,str1,boost::is_any_of("|"));
return 0;
}
最佳答案
这不是 boost::split
的正确用法,因为第一个参数必须是 string
的容器,而 split
确实如此具体结构不知道怎么填。我给你提示如何解决它。我没有测试代码,但你可以自己试试:
首先,您必须声明一个 vector 来存储零件:
std::vector<std::string> parts;
然后,boost::split
可以拆分命令字符串:
boost::split( parts, str, boost::is_any_of("|"));
在相应的QueueCommand
变量中预留足够的空间:
q.QCmd.resize(parts.size() - 1);
(最后一个包含 float )。将字符串复制到结构中。您必须确保 parts 数组至少包含两个元素:
std::copy(parts.begin(), parts.begin() + parts.size() - 1, q.QCmd.begin());
设置结构的 float 部分:
q.timeValue = boost::lexical_cast<float>(parts[parts.size() - 1]);
5gon12eder 在评论中的建议:
这看起来更优雅和高效,但 std::move
需要 C++11:
q.timeValue = boost::lexical_cast<float>(parts.back());
parts.pop_back();
q.QCmd = std::move(parts);
关于c++ - 如何从 boost::split 获取多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693334/