【问题标题】:C++ while loop and string lengthC++ while循环和字符串长度
【发布时间】:2011-06-18 02:35:44
【问题描述】:

如果我有以下 C++ 代码:

#include <iostream>
#include <string>
int main()
{
std::string str;
while (std::cin>>str)
std::cout<<str<<"\n"; 
std::cout<<str.length(); // UPDATE: str.length
return 0;
}

当我运行程序并且不键入string 并按Enter 时,我得到empty 输出。这是否意味着 while 循环运行并认为有一个 input 即使它是空的?

如何终止这个循环?

最后,为什么我在输出中没有得到字符串的length

更新: 我想使用string 函数解决问题

谢谢。

【问题讨论】:

  • 我想它会得到一个compile Time Error。什么是s?
  • @Javed Akram。我修改了s,但问题仍然有效。谢谢
  • 我发现了这个问题。似乎我忘了在 two std::cout 语句周围插入 { }。谢谢

标签: c++ string while-loop


【解决方案1】:

输入:

std::cin>>str

从流中读取一个 [white] 空格分隔的单词。
空白包括(空格/制表符和换行符)。

这意味着它会忽略所有空格,直到它得到一个非空格字符。然后它读取字符直到它得到一个空白字符。

因此,如果您只是按换行符(回车),它将忽略该字符。它一直忽略,直到找到一个词。

如果你想让循环结束。你有两个选择。寻找一个特殊的词。或者将 EOF 字符注入流中。在 Unix/Linux 上,这是用 -D on WINdows -Z

完成的

【讨论】:

    【解决方案2】:

    while循环中,如果std::cin成功将数据读入strstd::cin&gt;&gt;str将返回true,否则返回false

    由于std::cin 总是可以从输入流中读取数据,这意味着while(std::cin &gt;&gt; str) 将是一个无限循环,除非您按下某个生成EOF 字符的键。产生 EOF 的键组合取决于操作系统。还有一件事可以产生 EOF,那就是关闭输入流!

    【讨论】:

      【解决方案3】:

      因为“输入”产生“载体返回”符号。它是不可见的,只是开始新行。 您可以使用 istream 对象并使用 get() 函数,该函数返回读取的字符数:

      char ch;

      while(cin.get(ch)) { }

      【讨论】:

      • 难道没有办法使用string 函数来做到这一点吗?谢谢
      • 很抱歉,来自 istream 的 get() 不接受字符串。您可以在这里查看参考:cplusplus.com/reference/iostream/istream/get 但我可以建议您调用 string.push_back(ch);循环调用。
      【解决方案4】:

      这样写代码并在第4行设置断点:

        std::string str;
        while (std::cin >> str)
        {
          std::cout << "you typed: " << str << "\n";
          std::cout << "str.length(): " << str.length() << "\n";;
        }
      

      【讨论】:

        猜你喜欢
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 2014-09-25
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        相关资源
        最近更新 更多