Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
#1

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

01.07.2015, 18:26. Просмотров 505. Ответов 5
Метки нет (Все метки)

Приветствую товарищей-программистов!

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

Двоичный поиск в упорядоченном массиве - C++
Дан упорядоченный по неубыванию целочисленный массив и набор чисел ki. Требуется для каждого числа ki найти позиции первого и последнего...

Бинарный поиск в упорядоченном по возрастанию массиве - C++
Напишите программу, которая, используя метод бинарного поиска, выполняет поиск в упорядоченном по возрастанию массиве.

Двоичный (бинарный) поиск элемента в двумерном массиве - C++
Доброго времени суток. есть вот такое задание: Написать функцию, реализующую алгоритм бинарного поиска заданного ключа в двухмерном...

Написать функцию двоичного поиска в упорядоченном по алфавиту массиве слов - C++
Написать функцию двоичного поиска в упорядоченном по алфавиту массиве слов

Двоичный(бинарный) поиск - C++
Столкнулся с такой проблемой. использую бинарный поиск в упорядоченном массиве чисел для поиска количества повторений нужного мне числа К...

Двоичный (бинарный) поиск - C++
Вот такой вот вопрос: Есть например такой линейный массив 1 1 1 1 2 3 4 5 6 Вводят какое-то число и нужно проверить сколько...

5
Renji
2061 / 1418 / 320
Регистрация: 05.06.2014
Сообщений: 4,075
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.
0
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.
0
Renji
2061 / 1418 / 320
Регистрация: 05.06.2014
Сообщений: 4,075
01.07.2015, 20:00 #4
Цитата Сообщение от Novichock123 Посмотреть сообщение
if (key < massiv[mid].Word)
У вас key - C (без плюсов) строка. Она в правильный < не умеет. Нужно вместо char*key использовать const std::string&key.
0
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.
0
Renji
2061 / 1418 / 320
Регистрация: 05.06.2014
Сообщений: 4,075
01.07.2015, 20:20 #6
strcmp(A,B) надо менять на A<B (A>B, A==B), strcpy(A,B) на A=B, а в структуру ставить string Word (без &).
0
01.07.2015, 20:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 20:20
Привет! Вот еще темы с ответами:

Поиск элемента, меньшего заданного, в упорядоченном массиве - C++
Добрый день. Мне необходимо найти в массиве первый элемент, который меньше заданного, и, очень желательно, за логарифм. Массив упорядочен...

Поиск заданного элемента в упорядоченном по возрастанию массиве целых чисел - C++
Осуществить поиск заданного элемента в упорядоченном по возрастанию (по убыванию) массиве целых чисел.

Поиск числа в двумерном массиве (бинарный поиск) - C++
Произвожу поиск элемента в массиве двумя способами: линейным(последовательным) поиском и бинарным(двоичным). Первый работает на ура. Второй...

Сортировка и двоичный поиск в массиве. - C++
Помогите чайнику изменить следующий код: // F_08_L_2.cpp: определяет точку входа для консольного приложения. // #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.