在一个while循环中cin

时间:2013-05-04 08:20:27

标签: c++ while-loop cin

#include <iostream>

using namespace std;

int main()
{
    string previous;
    string current;

    while (cin >> current)
    {
        if(current == previous)
        {
            cout << "repeated word";
        }

        previous=current;
    }

    return 0;
}

我的问题是:

  1. 当它指出while(cin>>current)时,为什么整个输入的文本字符串未分配给当前?我不明白它是如何单独比较所有单词的。

  2. 它是如何为之前的一句话得到的。它是如何知道2个相同的单词是相邻的?

  3. 编辑:我想我理解为什么。告诉我,如果我错了,但我认为它是因为编译器在空格处停止cin赋值并且第一个字被分配给当前,然后它将它与前一个词进行比较,但由于它是第一个词,它没有前一个单词所以它只是将第一个单词分配给前一个单词并比较句子中的下一个单词,直到没有剩下的单词为止。我很确定这是它的工作原理但我会留下这个以防万一有人想知道类似的东西。

3 个答案:

答案 0 :(得分:2)

  1. 默认行为是在读取字符串时停止在空格上。您可以通过说std::cin >> std::noskipws
  2. 将其更改为读取空格
  3. 前一个单词始终在循环结束时指定。鉴于第1部分的答案,应该清楚为什么以前的工作。

答案 1 :(得分:1)

  1. 如果将std::istream::operator>>与std :: string参数一起使用,它会读取字符,直到找到任何空格字符。这意味着如果您输入一个句子,它只会读取一个“单词”。使用std::getline(cin, current);读取整行(直到换行符)。
  2. 您将当前时间分配给上一个:previous = current。这意味着在阅读current后,您需要previous current。因此,下次在您阅读之前,您可以将先前与当前进行比较,看看它们是否相同。

答案 2 :(得分:-1)

如果您想使用字符串,则必须使用k#include string