用户将输入一个值(大小),该值表示要处理的值的数量。输入的值将存储在具有1000个元素的short类型的数组中。用户将输入尺寸编号。用户将输入搜索值。程序将在数据中搜索特定值。程序将显示一条消息,其中找到了该值的元素,或者显示一条消息,未找到该值
//使用顺序搜索来搜索数组的功能
///将下标/元素号分配给找到的偏移量,如果找不到,则分配偏移量-1。
无效的顺序搜索(短数据[],短大小,短搜索值,短和偏移量
)for (int n = 0; n < size; n++)
{
if (search_value == data[n])
offset = n;
else
offset = -1;
}
我只为数组的最后一个元素找到一个值,而我对于从这里去哪里感到困惑。如果我删除else语句,我将获得数组中值的位置,但它还会为任何数字值提供数组中的最后位置。
答案 0 :(得分:0)
Do offset = -1。找到好发现后进行的任何负面发现都会破坏您的发现。
这不是惯用的c ++。 惯用的方法是使用find。
auto data_result = std::find(data, data + size, element);
auto offset = data_result - data;
答案 1 :(得分:0)
使用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;
}