Как написать функцию void, которая будет искать значения в массиве и передавать позицию этого значения обратно в основную функцию по ссылке? - PullRequest
0 голосов
/ 08 апреля 2019

Пользователь введет значение (размер), которое представляет количество значений для обработки.Введенные значения будут сохранены в массиве типа short, который имеет 1000 элементов.Пользователь будет вводить номера размеров.Пользователь введет значение поиска.Программа будет искать данные для определенного значения.Программа отобразит сообщение, в каком элементе было найдено значение, или отобразит сообщение, что значение не найдено

// Функция поиска в массиве с использованием последовательного поиска

// Назначение индекса /элемент #, чтобы сместить там, где найдено, или назначить смещение -1, если не найдено.

void sequential_search (короткие данные [], короткий размер, короткое search_value, short & offset)

for (int n = 0; n < size; n++)
{
    if (search_value == data[n])
        offset = n;
    else 
        offset = -1;
}

I'mтолько найти значение для последнего элемента массива, и я не понимаю, куда идти дальше.Если я возьму оператор else, я получу позиции значений в массиве, но он также даст любому числовому значению последнюю позицию в массиве.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

«Правильный» способ сделать это с использованием STL - использовать find из algorithm и distance из iterator:

short data[] = {10, 20, 30}; // length 3
ptrdiff_t index = std::distance(data, std::find(data, data + 3, 20));

Проблема с примером кода заключается в том, что как только вы находите правильный индекс, вы продолжаете и переопределяете найденное значение. Вы должны добавить break или return, чтобы ваш код стал:

void sequential_search(short data[], short size, short search_value, short &offset) {
    for (unsigned int i = 0; i < size; ++i) {
        if (data[i] == search_value) {
            offset = data[i];
            return;
        }
    }
    // Value has not been found, and whole array has been checked
    offset = -1;
}
0 голосов
/ 08 апреля 2019

Do offset = -1 перед оператором для . Любые негативные находки, которые вы делаете после удачной находки, повредят вашу удачную находку.

Это очень не идиоматический с ++. Идиоматическим способом было бы использовать find.

auto data_result = std::find(data, data + size, element);
auto offset = data_result - data;
...