Форум программистов, компьютерный форум CyberForum.ru

Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур - C++

Восстановить пароль Регистрация
 
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
01.07.2015, 18:26     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур #1
Приветствую товарищей-программистов!

Есть массив структур StructWords massiv[150].
C++
1
2
3
4
5
struct StructWords
{
char Word[32];
//другие данные
};
Массив структур отсортирован по алфавиту по char Word[32] (помучался с сортировкой, но сделал).
Беда вот в чём. Ввожу слово в консоли, это слово есть в массиве структур (даже по несколько раз), его надо найти в массиве структур. Как ни пытался, не получается создать бинарный поиск для этого массива структур.
Прошу помочь, ибо идей больше нет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 18:26     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур
Посмотрите здесь:

C++ Бинарный поиск в массиве
C++ Бинарный поиск в массиве с++
Сортировка и двоичный поиск в массиве. C++
Двоичный(бинарный) поиск C++
C++ Двоичный (бинарный) поиск
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
01.07.2015, 19:10     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур #2
C++
1
2
3
4
5
6
7
struct StructWords
{
   char Word[32];
   bool operator<(const StructWords&value)const{return strcmp(Word,value.Word)<0;}
   bool operator>(const StructWords&value)const{return strcmp(Word,value.Word)>0;}
   bool operator==(const StructWords&value)const{return strcmp(Word,value.Word)==0;}
};
Дальше сравниваете объекты StructWords точно также как числа (if(A<B)...). Для чисел то вы бинарный поиск и сортировку написать можете? Ну вот берете готовый код для чисел и меняете числа на StructWords.
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
01.07.2015, 19:21  [ТС]     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур #3
Пытался так же делать без перегрузки операторов, всё время получалось, что элемент не найден. И сейчас тоже.
Что-то я не то делаю...
К примеру реализация с помощью перегрузки операторов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int BinarySearch(char * key)
        {
            int left = 0, right = 150, mid;
            while (left <= right)
            {
                mid = left + (right - left) / 2;
                if (key < massiv[mid].Word) right = mid - 1;
                else if (key > massiv[mid].Word) left = mid + 1;
                else return mid;
            }
            return -1;
        }
Тот же самый эффект - возвращает -1.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
01.07.2015, 20:00     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур #4
Цитата Сообщение от Novichock123 Посмотреть сообщение
if (key < massiv[mid].Word)
У вас key - C (без плюсов) строка. Она в правильный < не умеет. Нужно вместо char*key использовать const std::string&key.
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
01.07.2015, 20:09  [ТС]     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур #5
Так если я вместо char*key подставлю const std::string&key в принимающие значения, то ничего не изменится.
Если в структуре char*key заменю на const std::string&key , то ругаться будет везде, где есть strcmp, stcpy.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
01.07.2015, 20:20     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур #6
strcmp(A,B) надо менять на A<B (A>B, A==B), strcpy(A,B) на A=B, а в структуру ставить string Word (без &).
Yandex
Объявления
01.07.2015, 20:20     Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур
Ответ Создать тему
Опции темы

Текущее время: 08:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru