2017-02-01 71 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 

输出矢量包括两个相等的单词。