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

Просто введите это слово от пользователя и добавьте 'if/else' в цикл' while' ... BTW, ваш вопрос вызывает впечатление, что вы просите нас сделать домашнее задание для вас. –

+0

вы можете использовать std :: find, если iterator return не является окончанием, вы можете использовать этот итератор для изменения значения. – 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 

Выходной вектор включает в себя два равных слова.