1
#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. 它是如何得到一个词的。它怎么知道两个相同的词是相邻的?

编辑:我想我只是明白为什么。告诉我我是否错了,但我认为这是因为编译器cin在空格处停止分配并且第一个单词被分配给当前单词,然后它将它与前一个单词进行比较,但由于它是第一个单词,它没有前一个词,所以它只是将第一个词分配给前一个词,并比较句子中的下一个词,直到没有更多的词。我相当肯定这就是它的工作原理,但如果有人想知道类似的事情,我会留下来。

4

3 回答 3

2
  1. 默认行为是在读取字符串时停止在空白处。您可以通过说将其更改为读取空格 std::cin >> std::noskipws
  2. 前一个单词总是在循环结束时分配。鉴于第 1 部分的答案,应该清楚为什么以前的工作。
于 2013-05-04T08:27:25.420 回答
1
  1. 如果您使用std::istream::operator>>std::string 参数,它会读取字符,直到找到任何空白字符。这意味着如果您输入一个句子,它只会读取一个“单词”。用于std::getline(cin, current);读取整行(直到换行符)。
  2. 您将当前分配给上一个:previous = current。这意味着,读完之后current,你做出来previous current。所以下一次,在你阅读之前,你可以比较一下以前的和现在的,看看它们是否是一样的。
于 2013-05-04T08:26:32.187 回答
-1

如果要使用字符串,则必须使用#include stringstd_lib_facilities.h

于 2017-01-11T19:37:25.903 回答