2017-02-01 69 views
0

我正在做這個練習,編寫一個程序,它接收單詞並打印單詞列表而不重複。然而,當問題進一步要求用「Bleep」代替選擇的詞(我不喜歡)時,我被卡住了。如何將矢量字符串的值更改爲不同的字符串值?

下面是代碼:

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    vector<string>words; 
    string temp; 

    while (cin>>temp) 
     words.push_back(temp); 

    cout << "Number of words: " << words.size() << "\n"; 

    for (int i = 0; i<words.size(); ++i) 
     if(i == 0 || words[i-1] != words[i]) 
      cout << words[i] << '\n'; 



    return 0; 
} 

我如何添加代碼來改變用戶的字符串輸入例如「可愛」到「嗶嗶」?非常感謝。

+0

只要從用戶那裏得到輸入單詞,並在'while'循環內添加一個'if/else' ...順便說一句,你的問題有點讓你要求我們爲你做功課。 –

+0

你可以使用std :: find如果迭代器返回不是結束,那麼你可以使用這個迭代器來改變這個值。 – user1438832

+1

如果你需要沒有重複的單詞列表,你需要使用集,而不是矢量。除此之外,請使用@ acraig5075的答案 –

回答

3

您可以比較輸入單詞和禁止單詞列表,並根據輸入單詞是否在列表中繼續。

#include <algorithm> 

vector<string> badWords = { "bad", "words", "for", "example", "cute" }; 

while (cin>>temp) 
{ 
    if (std::find(badWords.begin(), badWords.end(), temp) == badWords.end()) 
    words.push_back(temp); 
    else 
    words.push_back("bleep"); 
} 
1

while (cin>>temp) 
    words.push_back(temp); 

該塊只是更改爲以下塊:

vector<string> bad_words = { "beautiful", "nice", "sweet", "cute" }; // The badwords you have 
while (cin>>temp){ 
    for(int i=0; i<bad_words.size(); i++){ 
     if(bad_words[i]==temp){ 
      temp="bleep"; 
      break; 
     } 
    } 
    words.push_back(temp); 
} 
0

我說得對,通過

打印的話沒有重複

列表

你的意思是將你的初始字符串向量轉換爲唯一字符串向量?在這種情況下,你的算法是錯誤的。看部分

for (int i = 0; i<words.size(); ++i) 
    if(i == 0 || words[i-1] != words[i]) 
     cout << words[i] << '\n'; 

此算法不處理兩個或更多重複分開的情況。例如,

input: word1 word2 word3 word1 word1 word1 
output: word1 word2 word3 word1 

輸出矢量包括兩個相等的單詞。