在while循环中

cin in a while-loop

本文关键字:循环 while      更新时间:2023-10-16
#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)时,为什么整个输入的文本字符串没有分配给current?我不明白它是如何单独比较所有单词的。

  2. 它是如何得到"先前"这个词的?它怎么知道两个相同的单词是相邻的?

编辑:我想我明白为什么了。如果我错了,请告诉我,但我认为这是因为编译器在空格处停止cin赋值,第一个单词被分配给current,然后将其与前一个单词进行比较,但由于它是第一个单词,它没有前一个单词,所以它只是将第一个单词分配给previous,并比较句子中的下一个单词,直到没有更多的单词。我很确定这就是它是如何工作的,但我要把它留在这里以防有人想知道类似的事情。
  1. 默认行为是在读取字符串时停止空格。您可以通过输入std::cin >> std::noskipws将其更改为读取空白。
  2. 前一个单词总是在循环结束时赋值。给出第一部分的答案,应该清楚为什么前面的工作。
  1. 如果您将std::istream::operator>>与std::string参数一起使用,它将读取字符,直到找到任何空白字符为止。这意味着如果你输入一个句子,它只会读取一个"单词"。使用std::getline(cin, current);读取整行(直到换行符)。
  2. 将当前值赋给先前值:previous = current。这意味着在阅读current之后,您将previous变为current。所以下次,在你阅读之前,你可以比较先前和当前,看看它们是否相同。

如果您想使用字符串,必须使用#include stringstd_lib_facilities.h