我应该用什么来代替sscanf的?(What should I use instead of ssc

2019-06-23 23:17发布

我有一个sscanf的解决了(从字符串中提取的东西)的问题。 我不喜欢的sscanf但因为它不是类型安全的,是旧的,太可怕了。 我要聪明一点,并使用C ++标准库的一些更现代的部分。 我应该用什么呢?

Answer 1:

尝试std::stringstream

#include <sstream>

...

std::stringstream s("123 456 789");
int a, b, c;
s >> a >> b >> c;


Answer 2:

对于大多数工作标准流做的工作完美,

std::string data = "AraK 22 4.0";
std::stringstream convertor(data);
std::string name;
int age;
double gpa;

convertor >> name >> age >> gpa;

if(convertor.fail() == true)
{
    // if the data string is not well-formatted do what ever you want here
}

如果您需要更复杂的分析更强大的工具,那么你可以从升压考虑正则表达式,甚至精神。



Answer 3:

如果包含sstream ,你将有机会获得该字符串提供流,这是你需要什么的stringstream类。 Roguewave有一些很好的关于如何使用它的例子。



Answer 4:

如果你真的想不使用流(这是因为可读性好),你可以使用StringPrintf。

你可以找到它的富丽实现:

https://github.com/facebook/folly/blob/master/folly/String.h#L165



Answer 5:

与fgets或与strtol



文章来源: What should I use instead of sscanf?