假设我有示例代码:
std::string s;
std::cin >> std::setw(4) >> s;
std::cout << s;
现在对于输入abcdef
结果将是abc
,对于abc
,结果也将是abc
。问题是我如何检查字符串是否由于限制而在中间拆分,或者结果字符串是实际字符串?我需要知道输入是否合适或跳过了一些数据。
虽然我知道在读入char*
时会考虑流的宽度,但我不知道在读入std::string
时也会考虑它。假设是这样,阅读将在三个条件下停止:
- 流被完全读取,在这种情况下
eof()
设置。 - 下一个字符是一个空格。
- 读取需要读取的字符数。
也就是说,您可以检查 in.eof()
和 std::isspace(in.peek()
. 好吧,您真正需要使用的流是否使用了有趣的std::ctype<char>
方面
std::isspace(in.getloc(),
std::char_traits<char>::to_char_type(in.peek()));