如何将sscanf的使用转换为cin?

时间:2011-02-11 08:09:35

标签: c++ c scanf

我需要将此行转换为使用cin。

sscanf(s, "%*s%d", &d);

sscanf与scanf和cin有什么区别?

1 个答案:

答案 0 :(得分:5)

你不能出于两个原因。首先,cout用于输出,scanf系列用于输入,但sscanf也解析一个字符串,因此iostream等价物将是一个istringstream。

其次,格式字符串无法匹配。第一个指令(%* s)读取非空白字符(因为S而作为字符串),然后丢弃它们(因为星号)。第二个指令读取一个int,但此时已存在的任何整数都已被读取并丢弃。在第一个指令之后,您将不再有输入字符,或者下一个字符将是空格。

相反,如果你有:

sscanf(s, "%*s %d", &d)

然后你会读取非空格,一些空格,然后是整数。与此相当的最简单的字符串流将是:

std::istringstream ss (s);  // Put the initial string s into the stream.
int d;
std::string _;  // Used but then ignored; this is easier than alternatives.
ss >> _ >> d;