C++使用std::sscanf和std::string

4
我希望从一个字符串中“提取”信息。该字符串始终以格式int int char出现。
我花了很多时间研究这个问题,查看了“所有”的示例和谷歌搜索结果,但没有找到解决方法。有些示例编译通过,但会崩溃(没有溢出)。
以下是当前代码,在编译时会崩溃。
// Data                    
string str = "53 25 S";
int num1;
int num2;
char type3;

// Read values                                  
sscanf(str.c_str(),"%i %i %c",num1,num2,type3);

std::istringstream 是一个考虑的选择吗? - Thomas Matthews
是的。还有strtok()的考虑,但是对于这个问题,我想要尽可能简单。 - Evan Carslake
2个回答

10

你需要运算符的地址,即

sscanf(str.c_str(),"%i %i %c",&num1,&num2,&type3);

10

sscanf()的文档应该包含您问题的答案。

如果您坚持使用sscanf(),则需要传递num1num2num3的地址,而不是它们的值。

sscanf(str.c_str(),"%i %i %c",&num1,&num2,&type3);

使用标准头文件<sstream>中声明的stringstream比尝试使用已弃用的C函数更好。

std::istringstream some_stream(str);
some_stream >> num1 >> num2 >> type3;

为那些知道sscanf方法的人提供如何使用stringstream的链接会很好。比如如何将一个通用格式字符串转换为stringstream范例。 - Eric Auld
除了非常简单/琐碎的情况[如此问题]之外,实际上并没有这样的链接。它们被称为涉及不同范例,因为它们涉及对底层问题(如何从字符串中提取指定信息)的思考方式非常不同。 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接