Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::string的sscanf等效项_C++ - Fatal编程技术网

C++ std::string的sscanf等效项

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”的字符串,我需要存储这四个子字符串,它们由整数中的空格分隔。是否有一种优雅的方式来完成这项任务,就像在C中使用字符串一样(使用sscanf)?这不是一个家庭作业问题

最干净的方法可能是使用带有istream_迭代器的stringstream,类似这样:

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。@BaummitAugen
std::istringstream
在这里更合适。@JamesKanze我同意,谢谢你的提示。要将前导
0
视为八进制,请将
基域设置为
0
<代码>在.setf中(std::ios_base::fmtflags(),std::ios_base::basefield)
,因为没有为此指定的标志或操纵器。至于这是否是最好的解决方案:这取决于他是否拥有可变数量的字段。如果每次正好是四个整数,则最好是i1>>i2>>i3>>i4
中的
,并进行错误检查以确保没有更多字段。