2016-04-29 4 views
0

Im очень новый для программирования, и я в настоящее время пытаюсь написать код для двоичного поиска слова в файле .txt с использованием vector. Программа проверяет, найдено ли слово, если искомое слово не записано в файл .txt. Проблема в том, что я не совсем уверен, что правильно использую std::vector, и я почти уверен, что есть большая проблема с моей функцией BinarySearch().I прочитали почти каждый код в Интернете за binary_search, но я просто не могу заставить его работать. Я могу реально использовать некоторую помощь ... Файл TXT сортируется (одно слово в каждой строке) .Отель текущий код находит только 2-3 из 15 words.Here моя последняя попытка:Двоичный поиск слова

void BinarySearch(vector<string> cont,string s) 
{  
     int middle; 
     int first=0; 
     int leng=cont.size(); 
     int last=leng-1; 
     bool found=false; 



     while(first<=last && !found) 
     { 
      middle=(first+last)/2; 

      if(cont[middle]==s) 
      { 
      found=true; 
      } 

      else { 

      if(cont[middle]<s) 
      { 
      last=middle-1; 
      } 

      else 
      { 
      first=middle+1; 
+4

Вы можете получить большую помощь от инструмента, называемого * отладчиком *. Один шаг через код, утверждение по инструкции, * просмотр * одной или нескольких переменных. Сообщите нам, какие заявления являются причиной проблемы. –

ответ

2

Вы были очень близко. Но вы должны научиться использовать отладчик, потому что это довольно простой улов. Эта линия: if(container[middle]<search) говорит:

  1. Получить container «s элемент в middle
  2. Сравните это search
  3. Если речь идет по алфавиту раньше выполнить if -блок, в противном случае выполнить else -блок

if -block перемещается last для поиска по алфавиту сперва string s, что является противоположностью что вы хотите. Эта линия должна была сказать:

if(container[middle] > search) 

Вот реальный пример кода работает отлично после того, как я изменил этот символ: http://ideone.com/vvbONO


Похоже, что это назначение программирования, в этом случае ваш учитель, вероятно, не был бы рад, если бы вы решили его так, но так как вы правильно использовали отсортированный vector<string>, вы также можете использовать: binary_search, чтобы полностью заменить ваш BinarySearch. Просто замените это:

BinarySearch(sWord,find); 

С:

cout << (binary_search(cbegin(sWord), cend(sWord), find) ? "word is found" : "Not found") << endl; 

Если у вас есть вопросы, комментарии прочь!

+0

Я изменил меньший или больший символ, и он все еще находит только 2-3 слова ... Может быть, это что-то с txt-файлом, хотя я не вижу в этом ничего плохого :(И я прочитал эту страницу для binary_search, но я не совсем понимаю, как объединить его с вектором в начале кода. Спасибо, что нашли время ответить и помочь в любом случае :) –

+0

@ J.Doe Итак, используйте ваш отладчик и живой пример, который я связал: http://ideone.com/vvbONO Если вы можете повторить поведение, добавьте его в свой вопрос. Но вот что я подозреваю: ваш 'vector' не отсортирован. Если это не так, отобразите содержимое 'sWord' и' find', которое приведет к сбою вашего «BinarySearch» в вашем примере. Вы также можете обменять свой вызов 'BinarySearch' на строку' binary_search', которую все мы знаем, это правильно. посмотрите, отличаются ли ваши ответы. –

+0

Да, я, наконец, понял это и сумел, я думал, что должен только сделать свой текстовый файл с одним словом в одной строке в начале. Я отсортировал вектор и теперь отлично работает. Спасибо! –

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