C++ std::string的sscanf等效项
我有一个格式为std::string str=“1001 0104 2325 9999”的字符串,我需要存储这四个子字符串,它们由整数中的空格分隔。是否有一种优雅的方式来完成这项任务,就像在C中使用字符串一样(使用sscanf)?这不是一个家庭作业问题 最干净的方法可能是使用带有istream_迭代器的stringstream,类似这样:C++ std::string的sscanf等效项,c++,C++,我有一个格式为std::string str=“1001 0104 2325 9999”的字符串,我需要存储这四个子字符串,它们由整数中的空格分隔。是否有一种优雅的方式来完成这项任务,就像在C中使用字符串一样(使用sscanf)?这不是一个家庭作业问题 最干净的方法可能是使用带有istream_迭代器的stringstream,类似这样: std::string str = "1001 0104 2325 9999"; std::istringstream in(str); std::vec
std::string str = "1001 0104 2325 9999";
std::istringstream in(str);
std::vector<int> numbers {
std::istream_iterator<int>(in),
std::istream_iterator<int>()
};
// just to show what we did:
for (int i : numbers)
std::cout << i << "\n";
std::string str=“1001 0104 2325 9999”;
std::istringstream-in(str);
向量数{
std::istream_迭代器(in),
std::istream_迭代器()
};
//只是为了展示我们所做的:
用于(int i:数字)
std::cout Look up。@BaummitAugenstd::istringstream
在这里更合适。@JamesKanze我同意,谢谢你的提示。要将前导0
视为八进制,请将基域设置为0
<代码>在.setf中(std::ios_base::fmtflags(),std::ios_base::basefield)
,因为没有为此指定的标志或操纵器。至于这是否是最好的解决方案:这取决于他是否拥有可变数量的字段。如果每次正好是四个整数,则最好是i1>>i2>>i3>>i4
中的,并进行错误检查以确保没有更多字段。