【问题标题】:Limiting input size with std::setw in std::cin在 std::cin 中使用 std::setw 限制输入大小
【发布时间】:2013-10-21 06:35:16
【问题描述】:

假设我有示例代码:

std::string s;
std::cin >> std::setw(4) >> s;
std::cout << s;

现在对于输入 abcdef,结果将是 abc,对于 abc,结果也是 abc。问题是如何检查字符串是否由于限制而在中间拆分或结果字符串是实际字符串?我需要知道输入是否适合或某些数据被跳过。

【问题讨论】:

  • 为什么不将整个字符串作为输入并使用一些子字符串变体?
  • 因为内存可能放不下,浪费资源。
  • 如果你之后清除字符串的内容,这将是一个非常边缘的资源丢失。
  • hmm..如何使用 getchar 或其 c++ 等效 istream::get ?在读取输入时,如果您点击 feof 这意味着没有更多的 charav=cters 剩余,如果没有,您已经读取了不完整的数据
  • JGab:是的,当然,如果我加载几 GB 的数据,这将是非常微不足道的。 ArunMu:我正在寻找比这更聪明的东西。

标签: c++ stream limit cin


【解决方案1】:

虽然我知道在读入char* 时会考虑流的宽度,但我不知道在读入std::string 时也会考虑它。假设是,阅读将在三种情况下停止:

  1. 在设置eof()的情况下,流被完全读取。
  2. 下一个字符是空格。
  3. 读取需要读取的字符数。

即可以查看in.eof()和std::isspace(in.peek()。好吧,您真正需要使用的流使用了一个有趣的std::ctype&lt;char&gt; facet

std::isspace(in.getloc(),
    std::char_traits<char>::to_char_type(in.peek()));

【讨论】:

  • 参数不是反过来吗? - std::isspace
  • @0x499602D2:这很有可能:我在输入答案时没有检查标准或文档。
猜你喜欢
  • 2017-07-20
  • 1970-01-01
  • 2013-11-13
  • 2021-06-13
  • 2021-02-26
  • 1970-01-01
相关资源
最近更新 更多