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

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

28.11.2021, 19:03. Показов 633. Ответов 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
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,023
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
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,023
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
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru