如何编写一个void函数来搜索数组中的值并通过引用将该值的位置传递回main函数?

问题描述 投票:0回答:2

用户将输入一个值(大小),表示要处理的值的数量。输入的值将存储在short类型的数组中,该数组包含1000个元素。用户将输入大小编号。用户将输入搜索值。程序将在数据中搜索特定值。程序将显示一个消息,其中找到值的元素或显示未找到值的消息

//使用顺序搜索搜索数组的功能

//将下标/元素#分配给找到的偏移量,如果未找到则分配偏移量-1。

void sequential_search(short data [],short size,short search_value,short&offset)

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

我只是为数组的最后一个元素找到了一个值,我很困惑从这里开始。如果我取出else语句,我得到数组中值的位置,但它也给出了数组中最后一个位置的任何数值。

c++ arrays function for-loop search
2个回答
0
投票

在for语句之前执行offset = -1。在一次好的发现后你发现的任何负面发现都会破坏你的好发现。

这不是惯用的c ++。惯用的方法是使用find。

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

0
投票

使用STL执行此操作的“正确”方法是使用来自findalgorithm和来自distanceiterator

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

您的代码示例的问题在于,一旦找到正确的索引,您就会继续并覆盖找到的值。您应该添加breakreturn,以便您的代码变为:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.