我的程序已完成,我得到的唯一错误来自我的二分搜索和线性搜索。它们是同一个错误所以我只会发布一个。
bool searchByDescriptionBinary(char desc[][DESC_SIZE],
const int NUM_ROWS,
char searchValue[DESC_SIZE],
int& foundPosition)
{
int first = 0,
last = NUM_ROWS - 1,
middle,
position = -1;
bool found = false;
while (!found && first <= last)
{
middle = (first + last) / 2;
if (desc[middle] == searchValue)
{
found = true;
position = middle;
}
else if (desc[middle] > searchValue)
last = middle - 1;
else
first = middle + 1;
}
return position;
}
答案 0 :(得分:3)
您的函数定义为bool
作为返回类型,但它返回int
(最后以return position
语句的形式)。这是一个类型错误。改变一种类型或另一种直到他们同意,并且应该编译。
答案 1 :(得分:1)
您的函数定义为返回bool
,但您尝试返回position
,其被声明为int
。
您想要返回found
(true
或false
),如果found == true
设置foundPosition = position
。
答案 2 :(得分:0)
首先,你不太可能得到你说你得到的错误。问题的根源在于您从声明为返回return position
的函数中尝试position
,其中int
是bool
。你想做什么呢?您为什么要尝试从int
函数返回bool
?
在任何情况下,这都不是非法的,这意味着int
将根据C ++语言的布尔转换规则隐式转换为bool
。有些编译器会在这种情况下发出警告,但不会出错。无论如何,这肯定不是你想要的。
其次,从您的函数声明中,很明显您打算通过foundPosition
参数(声明为int &
)返回索引。函数末尾的return
语句显然应该return found
,而不是return position
。然而,在您的代码中,您完全忽略了foundPosition
的存在。为什么?您为什么要尝试return
这个位置,而不是像原来的那样通过foundPosition
参数发送出去?这是你的代码吗?
第三(正如@Blastfurnace已经在评论中指出的那样),您的==
和>
比较并没有按照您的想法进行。您无法使用内置比较运算符比较C风格的字符串。您必须改为使用strcmp
。
答案 3 :(得分:0)
您应该return found;
而不是return postion;