以下函数应该执行线性搜索。
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
作为输出。当元素进入或离开数组时会发生这种情况。请帮忙。
答案 0 :(得分:0)
bool found;
:
return found;
布尔值通常限制为true / false,通常以1/0的形式重复。将{0}中的非零值放入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;
}