-1

以下函数应该执行线性搜索。

int linsearch(T arr[],int size,T target)
{
    int begin;
    int loc;
    bool found;
    for(begin=0;begin<size&&target!=arr[begin];begin++);
    loc = begin;
    if(target==arr[loc])
        found = loc;
    else
        found = -1;
    return found;
}

但是,无论我搜索什么,我总是得到1输出。当元素在数组中或数组之外时会发生这种情况。请帮忙。

4

1 回答 1

0
bool found;
:
return found;

布尔值通常限制为真/假,通常表示为 1/0。将非零值放入 a 很有可能将其bool强制转换为1.

如果您想返回找到它的索引,您可能应该使用int

int found;

但是,即使您进行了更改,它也不起作用:

int linsearch(T arr[],int size,T target)
{
    int begin;
    int loc;
    int found;  // <<-- changed this
    for(begin=0;begin<size&&target!=arr[begin];begin++);
    loc = begin;
    if(target==arr[loc])
        found = loc;
    else
        found = -1;
    return found;
}

那是因为,如果您没有找到该项目,begin(并且loc因为您将其设置为begin),size那么您将使用 . 检查超出数组的末端arr[loc]

您确实应该在循环后立即正确检查该条件,例如(loc完全删除,因为它是不必要的):

if (begin == size)
    found = -1;
else
    found = begin;

无论如何,您的代码可能会大大减少冗长:

int linsearch (T arr[], int size, T target)
{
    int loc;
    for (loc = 0; loc < size; loc++)
        if (target == arr[loc])
            return loc;
    return -1;
}
于 2013-09-18T08:40:59.610 回答