Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 11.09.2021
Сообщений: 118

Бинарный поиск для слова очищает вектор

28.11.2021, 19:03. Показов 654. Ответов 3

Студворк — интернет-сервис помощи студентам
В коде участвует проверка, что is_used == -1, но при этом у меня размер вектора равен 0, хотя я его меняю, добавляя элементы пушбеком

int is_used = -1;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    if (used_words.size() != 0)
    {
        is_used = binarySearch(used_words, word, 0, used_words.size());
    }
 
int binarySearch(vector <string>& used_words, const string key, int start, int end)
{
    int middle = 0;
        while(1)
        {
            middle = (start + end) / 2;
            if (key < used_words[middle])
                end = middle - 1;
            else if (key > used_words[middle])
                start = middle + 1;
            else
                return middle;
 
            if (start > end) // if borders have achieved each other
                return -1;
        }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2021, 19:03
Ответы с готовыми решениями:

Вектор пар и бинарный поиск
Всем доброго времени суток. Решаю следующую задачу. Есть vector &lt;pair&lt;int,int&gt;&gt; v я его сортирую и потом...

Не работает бинарный поиск слова в словаре
Вторую неделю пытаюсь поймать ошибку в программке на С. Моя реализация бинарного поиска в словаре. Не могу понять что я упускаю - вроде все...

бинарный поиск, для char
всем привет! Не подскажете как реализовать метод бинарного поиска для поля записи(я использую массив записей), если тип данных char ?...

3
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,097
28.11.2021, 19:14
Reb0ot,
1)полный код в студию!
2)полное описание проблемы в студию!

дополнительно вопросы:
Цитата Сообщение от Reb0ot Посмотреть сообщение
vector <string>& used_words
почему ссылка не константная? Ведь это только поиск

Цитата Сообщение от Reb0ot Посмотреть сообщение
middle = (start + end) / 2;
            if (key < used_words[middle])
почему нет проверки на выход middle за край вектора?

Добавлено через 1 минуту
Цитата Сообщение от Reb0ot Посмотреть сообщение
очищает вектор
приведённый огрызок кода не меняет содержимое вектора
0
1 / 1 / 0
Регистрация: 11.09.2021
Сообщений: 118
28.11.2021, 19:48  [ТС]
Алексей1153, не могу и не хочу кидать полный код(слишком опасно и нет надобности), word пользователь вводит сам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
void search(fstream& f, vector <string> &used_words, string word)
{
    string buffer;
    bool check = false;
    cout << used_words.size() << ' '; // вывод размера вектора, который постоянно равен нулю, в этом и есть проблема и код не работает, хотя я добавляю элементы
    // checking if word in used_words
    int is_used = -1;
    if (used_words.size() != 0)
    {
        is_used = binarySearch(used_words, word, 0, used_words.size());
    }
 
    while (!f.eof())
    {
        f >> buffer;
 
        //cout << is_used;
        if (word[word.length()- 1] == buffer[0] && is_used == -1) //&& !used_words
        {
            cout << buffer << endl;
            check = true;
 
            used_words.push_back(word);
            used_words.push_back(buffer);
        }
 
        // sort used_words
        if (check)
        {
            insertionSort(used_words);
            for (int i = 0; i < used_words.size(); i++)
                cout << used_words[i] << ' ';
            break;
        }
    }
}
 
int binarySearch(const vector <string>& used_words, const string key, int start, int end)
{
    int middle = 0;
    while (1)
    {
 
        middle = (start + end) / 2;
        if (key < used_words[middle])
            end = middle - 1;
        else if (key > used_words[middle])
            start = middle + 1;
        else
            return middle;
 
        if (start > end) // if borders have achieved each other
            return -1;
    
    }
}
Добавлено через 1 минуту
проблема состоит в алгоритме бинарного поиска, наверное, и в том, что вектор постоянно очищается

Добавлено через 1 минуту
проблема решена, я вектор объявлял в функции
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,097
28.11.2021, 20:11
Цитата Сообщение от Reb0ot Посмотреть сообщение
while (!f.eof())
    {
        f >> buffer;
->

C++
1
2
while (f >> buffer)
{
Добавлено через 1 минуту
Цитата Сообщение от Reb0ot Посмотреть сообщение
if (word[word.length()- 1]
если word будет пустой - то будет беда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2021, 20:11
Помогаю со студенческими работами здесь

Бинарный поиск для char
Здравствуйте, сделал программу для поиска заглавных и строчных букв в вводимом с клавиатуры тексте. Ищет отлично и без проблем, но нужно...

Бинарный поиск: преобразовать текст T в текст S, путем замены каждого вхождения слова A[i] на соответствующее слово B[i]
Помогите пожалуйста, уже довольно долго пытаюсь решить и найти решение для данной задачи, но безуспешно. Пусть задан в виде...

Бинарный поиск для отсортированного списка
Привет, возник вопрос по работе и написанию бинарного поиска, написал код. Первый вопрос для чего нужен int key, сам код вот public static...

Бинарный поиск для std::list
Здравствуйте. Хотел написать бинарный поиск для std::list. Пишу: //Тип coord определён выше ...

Бинарный поиск для нахождения нечетных чисел
Подскажите пожалуйста как этот алгоритм линейного поиска обернуть в бинарный поиск for(int i = 0; i &lt; N; i++) { if(a % 2 != 0)...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru