我有一个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?