c++ - 如何从 boost::split 获取多个参数

标签 c++ c++11 visual-c++

如何拆分 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/

相关文章:

c++ - 什么是指向成员模板参数的指针?

c++11 - 从 C++ 程序将输出发送到 systemd-journal

c++ - 什么时候 lambda 微不足道?

c++ - 如何加快从流到内存的读取行?

c++ - 如何修复 "initialization of ' hwndButton' is skipped by 'case' label"and hwndButton' is skipped by 'default' label"

c++ - 如何调试静态依赖加载问题?

c++ - 内存碎片会减慢 New/Malloc 的速度吗?

C++:跨线程错误处理问题

c++ - Visual Studio 的对象文件

c++ - 合并排序程序总是有效,但有时会在最后说 abort trap