我想比较两个数组。当数组中的任何元素都不匹配时,我将变量设置为true,并且它为false。我想返回该变量,它是一个布尔值,但它不返回该变量。为什么呢?
bool compare_arr(int arr1[], int len_arr1, int arr2[] ,int len_arr2){
cout << "Compare the two Arrays"<< endl;
bool result = true;
for(int x = 0; x < len_arr1; x++)
{
if(arr1[x]==arr2[x])
{
continue;
}
else
{
result = false;
break;
}
}
return result;
}
int main()
{
int arr1[] = {1,2,3,4};
int len_arr1 = sizeof(arr1)/sizeof(arr1[0]);
int arr2[] = {1,2,3,4};
int len_arr2 = sizeof(arr2)/sizeof(arr1[0]);
compare_arr(arr1,len_arr1,arr2,len_arr2);
return 0;
}
答案 0 :(得分:3)
您没有使用函数调用的返回值
compare_arr(arr1,len_arr1,arr2,len_arr2);
例如,您可以写
std::cout << compare_arr(arr1,len_arr1,arr2,len_arr2) << '\n';
或
#include <iomanip>
//...
std::cout << std::boolalpha << compare_arr(arr1,len_arr1,arr2,len_arr2) << '\n';
但是在任何情况下,如果数组中元素的数量不同,您的函数都可以调用未定义的行为。
可以使用标准算法std::equal
来简化函数的编写。例如
#include <algorithm>
//...
bool compare_arr( const int arr1[], size_t len_arr1, const int arr2[], size_t len_arr2 )
{
return std::equal( arr1, arr1 + len_arr1, arr2, arr2 + len_arr2 );
}
请注意,使用sizeof
运算符的表达式结果的类型为size_t
。所以你应该写个例子
size_t len_arr1 = sizeof(arr1)/sizeof(arr1[0]);
^^^^^^
相应地,用于指定数组中元素数量的函数参数也应为size_t
类型。
如果您可能不使用标准算法,则可以通过以下方式声明和定义函数
bool compare_arr( const int arr1[], size_t len_arr1, const int arr2[], size_t len_arr2 )
{
bool result = len_arr1 == len_arr2;
for ( size_t i = 0; result && i < len_arr1; i++ )
{
result = arr1[i] == arr2[i];
}
return result;
}
答案 1 :(得分:1)
正如David所写,您忽略了返回值。您需要将返回值分配给变量才能使用它。
const bool compare_result = compare_arr(arr1,len_arr1,arr2,len_arr2);
关于编码风格的说明:
您应该修复循环,因为您仅使用第一个数组的长度,但是如果第二个数组的长度较小,则会出现段错误。
当您将问题标记为C ++时,请考虑使用std :: vector而不是c数组。