簡體   English   中英

cin在while循環中

[英]cin in a while-loop

#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,然后將其與前一個單詞進行比較,但是由於它是第一個單詞,因此沒有前一個單詞,因此它只是將第一個單詞分配給前一個單詞,然后比較句子中的下一個單詞,直到沒有其他單詞為止。 我相當確定這是如何工作的,但是如果有人想知道類似的事情,我將不做介紹。

  1. 默認行為是在讀取字符串時在空白處停止。 您可以通過說std::cin >> std::noskipws來將其更改為空白。
  2. 上一個字始終在循環末尾分配。 有了第1部分的答案,就應該清楚為什么以前的方法可行。
  1. 如果您將std::istream::operator>>與std :: string參數一起使用,它將讀取字符,直到找到任何空白字符為止。 這意味着,如果您輸入一個句子,它將僅讀取一個“單詞”。 使用std::getline(cin, current); 讀取整行(直到換行符)。
  2. 您將current分配給previous: previous = current 這意味着在讀取current ,您將產生previous current 因此,下一次,在閱讀之前,您可以將前一個與當前進行比較,看看它們是否是同一回事。

如果要使用字符串,則必須使用#include stringstd_lib_facilities.h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM