有人可以给我一些提示,从可变长度输入字符串中提取参数名称和参数值的最佳/优雅方法是什么?我需要提取这些值,以便将它们记录在另一个.txt文件中。我应该使用正则表达式吗?使用它们的方式是什么?
我知道如何做到这一点,但使用for循环和各种if-then条件,情况一团糟。我需要的是在哪里可以找到一些可以帮助我的内置函数。
谢谢!
最佳答案
在这种情况下,正则表达式是不必要的开销。单字符 std::string::find
足以完成此工作。假设每个参数(甚至第一个)都以#
开头,值是可选的(默认值为""
),并且尾随的#
始终被忽略,您可以执行以下操作:
std::string pstr = ...; // the parameter string
typedef std::pair<std::string, std::string> Param;
std::vector<Param> params;
std::size_t pos = pstr.find('#');
std::size_t next = pstr.find('#', pos);
while (pos != std::string::npos) {
std::string param, value;
std::size_t sep_pos = pstr.find('~', next);
if (sep_pos != std::string::npos) {
value = pstr.substr(sep_pos + 1, next - sep_pos - 1);
param = pstr.substr(pos + 1, sep_pos - pos - 1);
} else {
param = pstr.substr(pos + 1, next - pos - 1);
}
params.push_back(Param(param, value));
}
注意,
std::strtok
是一个错误的建议。该函数是不安全的,切勿在常规C++代码中使用。关于c++ - 解析字符串由以下参数给定:#parameter1〜value1#parameter2〜value2#parameter3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17195703/