2017-09-02 110 views
-5

我是新來的。我不明白if語句:i == 0,它消除了重複。怎麼運行的?謝謝。有人可以解釋這個C++代碼嗎?

vector<string>words; 
for (string temp; cin >> temp;) 
words.push_back(temp); 
cout << "Number of words:" << words.size() << '\n'; 
sort(words); 
for (int i = 0; i < words.size(); ++i) 
    if (i == 0 || words[i - 1] != words[i]) 
     cout << words[i] << '\n'; 
+0

只有當單詞[i - 1]!=單詞[i]' - 它與前一個不同時,它纔會打印單詞。 'i == 0'只是保護 - 因爲索引0沒有前一個。 –

+3

請選擇[一本好的初學C++書](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 [[使用名稱空間標準;'是一個不好的做法](https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice)! – tambre

+0

在調試器中使用一組已知輸入字符串(包括一些不止一次使用的單詞)運行它,並查看在單步執行最後一個循環時發生了什麼。 – WhozCraig

回答

0

如果i等於0,那麼你可以不看字[I-1],因爲你不能這樣做的話[-1]

此外,當您使用||運營商,如果第一個表達式爲真,第二個表達式不檢查

隨着i == 0 || words[i - 1] != words[i]可以打印你的第一個字,因爲我等於0和表達words[i - 1] != words[i]不檢查,不你的程序崩潰! 然後我與0不同,第一個表達式不是真的,第二個檢查。


對於unrepetition部分:

你的數組進行排序,所以相同字是一個接一個。 然後,你必須檢查前一個詞是不一樣的,你可以打印字


如何words[i - 1] != words[i]作品:

爲的std :: string,運營商==!=認準長度每個字符串,字符串中的每個字符

Comparison operator for std::string

此外,words[i-1]找以前的話,的爲目前的一個,來比較它們。

所以在這裏,如果兩個連續的單詞在長度和字母上不相同,則表達式爲真。 如果您的陣列中的字dogcatcatcat_dog是第一印刷(因爲i == 0部分的),第二個字被印刷cat,則epression是假,因爲字是相同的("cat" == "cat"),和finaly,cat_因爲不同於cat

+0

感謝您的回覆。你能解釋單詞[i - 1]!=單詞[i]是如何工作的嗎?如果我輸入:狗一隻貓一塊石頭 – zen

+0

試過ti解釋它,如果它不清楚,或者如果你有更多的問題,請不要猶豫 –

-1

看起來像您的程序打印的第一個單詞,以及每個其他單詞不在重複排序的單詞列表中。如果您正在嘗試尋找唯一的單詞,請嘗試使用std::unique

0

該程序首先將vector的所有單詞排序爲strings,並僅打印唯一的單詞。

i==0意味着第一個字,因爲你不能在第一個字前面任何如果當前詞是比較所以它永遠是唯一的(從先前並不存在的話)

word[i-1]!=word[i]檢查不同於以前的那個字打印。

||Logical Or運營商。

相關問題