【问题标题】:Behavior of the C++ extraction operator when used to read into a string用于读入字符串时 C++ 提取运算符的行为
【发布时间】:2011-09-08 00:50:38
【问题描述】:

我正在使用一些 C++ 代码,并注意到以下形式的一些代码:

ss >> str;

其中 ss 是一个流(在本例中是一个字符串流),而 str 是一个字符串。

这段代码的定义行为是什么?具体来说,这个执行后str的值是多少?

【问题讨论】:

    标签: c++ string iostream


    【解决方案1】:

    除非在ss.flags() 中设置了skipws 标志(默认情况下,但 你可以取消它),空白被跳过(而不是复制到str), 然后ss 从输入复制文本,直到空白或结尾 遇到文件(或者内存不足,或者读取 std::string::max_size 个字符)。

    什么是空白是由 ctype<char> 语言环境决定的 ss.

    【讨论】:

      【解决方案2】:

      >> 运算符将读取到第一个空白字符(或流的末尾)并将它们分配给 str。

      如果您的输入流包含“ab cde”。那么 str 将等于 "ab"。

      【讨论】:

        【解决方案3】:

        预期的行为是ss中存储的第一个单词将被消耗并存储在str中,其中word是根据之后获得的语言环境的最长非空格字符序列从ss 中删除任何前导空格字符。

        【讨论】:

          【解决方案4】:

          它将字节从 ss 放到 str。

          【讨论】:

          • 是的,我知道。使用什么字符或字符序列作为分隔符?
          • 当下一个字符是有效的空格或空字符,或者到达文件结束时,提取结束。
          • 嗯...这似乎是有道理的,因为这就是提取运算符与其他类型一起使用的方式。
          • 它不应该以空字符结尾,至少如果被灌输的语言环境是“C”语言环境。
          猜你喜欢
          • 2012-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多