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

Поиск - C++

Восстановить пароль Регистрация
 
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
02.11.2013, 14:44     Поиск #1
Здравствуйте! Возникла проблема при поиске слова(поиск интерполяционный). Проблема заключается в том что нельзя вычитать, умножать объекты string(и понятное дело). Вот код:
C++ (Qt)
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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{ 
....
 string* a = new string[k];
....  //считывание слов
 
int low = 0;
int high = arraySize - 1;
int mid;
//цикл интерполирующего поиска
while (a[low] < keyOfSearch && a[high] >= keyOfSearch) // keyOfSearch - само слово класса string. 
//a - это массив из  string(string *a=new string[arraySize] )
{
    mid = low + ((keyOfSearch - a[low]) * (high - low)) / (a[high] - a[low]);
   //если значение в ячейке с индексом mid меньше, то смещаем нижнюю границу
   if (a[mid] < keyOfSearch)
   low = mid + 1;
   //в случае, если значение больше, то смещаем верхнюю границу
   else if (a[mid] > keyOfSearch)
   high = mid - 1;
   //если равны, то возвращаем индекс
   else
   return mid;
}
 
   //если цикл while не вернул индекс искомого значения,
   //то проверяем не находится ли оно в ячейке массива с индексом low,
   //иначе возвращаем -1 (значение не найдено)
   if (a[low] == keyOfSearch)
   return low;
 
   else 
 
   return -1;
}
Пожалуйста, помогите обойти эту проблему
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 14:44     Поиск
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
02.11.2013, 16:32     Поиск #2
в чем смысл применения такого способа поиска для строк? используйте std::map и не мучайтесь.
хотя если хотите помучаться, то вот решение: интерполяция предполагает работу с числами, следовательно надо рассматривать строку как число, где символы представляют цифры в 128-ичной системе счисления (если используются только латинские буквы) или в 256-ичной (если исползуются любые символы ASCII таблицы) или 65536-ичной (если используется Unicode). тогда остается перегрузить операции вычитания и деления для строк, а также умножение на число, используя такую их интерпретацию. Думаю что такой подход очень сильно скажется на производительности, особенно деление. map будет работать гораздо быстрее, хотя в образовательных целях можно делать всё, что угодно. Дерзайте
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
02.11.2013, 18:05  [ТС]     Поиск #3
Понятно, что можно более легким способом искать, но такое задание по лабе)...чтож, буду мучиться с перегрузками.
Yandex
Объявления
02.11.2013, 18:05     Поиск
Ответ Создать тему
Опции темы

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