2014-12-11 7 views
2

Я делаю код, вы создали список слов. Он содержит «слово» и «описание». Слово и описание имеют свои собственные векторы. Я тоже пытаюсь использовать карты.C++ Wordlist; найти целое описание в vector/map

Программа идет хорошо, пока я не попытаюсь найти слова. Программа будет использовать только последнее слово из описания. Есть ли способ сделать целое предложение для одного вектора?

Это код о том, как я записываю описание. Весь программный код очень долго, так что я буду упоминать только важные вещи:

cout<< "Describe your word:"; //Describtion by using vectors 
cin>> desc;   //Here you enter the decribtion 
getline(cin, desc); //So you can have "space" and write a whole sentence. 
d.push_back(desc); //Place the describe at the back of the list so it is at the same index as the matching word 

И это код, который должен показать слово и Describtion:

cout<< "Enter a word to lookup:"; 
cin>> word; 
if (find(o.begin(), o.end(), word) !=o.end()) //Lookup if word excist in vector 
{ 
    int pos = find(o.begin(), o.end(), word) - o.begin(); //Searches which index the word is in the vector 
    cout<< "Describtion for " << word << " is " << d[pos] << endl; //d[pos] takes the description vector that is in the same index as the word vector 
} 
else 
    cout<< "Word not found! Try something else." << endl; //If word not found 

Это будет только принимать последнее слово из описания. У меня та же проблема, с помощью карт:

cout<< "Enter a word to lookup:"; 
cin>> word; 
if (L.find(word) != L.end()) //Lookup if the key excist 
{ 
    cout<< "Describtion for " << word << " is " << L[word] << endl; //Tells what the description is for the word if it excist 
} 
else 
    cout<< "Word not found! Try something else." << endl; //Tells you this if key is not found 

Итак, как я могу получить всю Describtion распечатанный для конкретного слова?

редактировать: Я заметил, что это только первое слово в Describtion Недостающий (я настолько глуп, чтобы не попробовать с большим количеством слов, чем 2)

Итак, что случилось? Как я могу получить слово frist в описании appere на выходе?

+1

Выполняйте описания, которые вы протестировали, со всеми двумя словами? – molbdnilo

+0

Хорошо, спасибо, что указали, что это похоже на то, что он пропускает только первое слово. – Supermixerman

+0

Добавьте 'cout << desc << endl;' между всеми строками в вашем коде чтения. – molbdnilo

ответ

0

Если вы выберете один std::string от std::cin, он получит только одно слово. Во-первых, вы получаете первое слово описания и положить его в desc:

cin >> desc;   // Here you enter the decribtion 

Тогда вы получаете оставшиеся слова в описании и положить их в desc. Перезапись предыдущего содержимого desc (первое слово):

getline(cin, desc); // So you can have "space" and write a whole sentence. 

Итак, теперь desc содержит все, но первое слово из описания. Подумайте об использовании отладчика, чтобы найти такую ​​вещь.

Другие рекомендации: Избегайте поиска в vector дважды. Сохраняйте результаты find в переменной:

auto search = find(o.begin(), o.end(), word); 
if (search != o.end()) { 
    int pos = std::distance(o.begin(), search); 
    // Use pos ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^