检查是否出现在数组C++中的数字
我做了一个编码样本测试,我认为这很容易。他们要求查找数组中是否出现数字打印输出是或不是打印输出否。首先,我想提出二进制搜索方法。但是当我看到它们给定的函数时,我认为不适合使用这种方法 在描述中,他们提到arr[]和k作为我们需要检查k是否出现在arr[]中的数字检查是否出现在数组C++中的数字,c++,C++,我做了一个编码样本测试,我认为这很容易。他们要求查找数组中是否出现数字打印输出是或不是打印输出否。首先,我想提出二进制搜索方法。但是当我看到它们给定的函数时,我认为不适合使用这种方法 在描述中,他们提到arr[]和k作为我们需要检查k是否出现在arr[]中的数字 char* findNumber(int arr_count, int arr[], int k) { int n = sizeof(arr)/sizeof(arr[0]); for(arr_count = 0; arr_coun
char* findNumber(int arr_count, int arr[], int k)
{
int n = sizeof(arr)/sizeof(arr[0]);
for(arr_count = 0; arr_count < n; arr_count++)
{
if(arr[arr_count]==k)
cout<<"YES";
else
cout<<"NO";
}
return 0;
}
但当我编译时,它显示输出为空。我不知道为什么?我解决了更多的难题。所以当我在这样一个简单的任务中出错时,我感觉很糟糕。请告诉我错误的部分
int n=sizeofar/sizeofar[0]
至少这是不正确的,因为数组arr在传递给函数时会衰减为指针
所以sizeofarr/sizeofarr[0]实际上是sizeofpointer/sizeofint。所以n总是1。当arr_count==0时,for循环总是只运行一次迭代
forarr_计数=0;arr_计数for( int i = 0; i < arr_count; ++i )
int n=sizeofar/sizeofar[0]
至少这是不正确的,因为数组arr在传递给函数时会衰减为指针
所以sizeofarr/sizeofarr[0]实际上是sizeofpointer/sizeofint。所以n总是1。当arr_count==0时,for循环总是只运行一次迭代
forarr_计数=0;arr_计数for( int i = 0; i < arr_count; ++i )
这里
编译器将int-arr[]更改为int*arr,这是因为。所以当你这么做的时候
int n = sizeof(arr)/sizeof(arr[0]);
sizeofarr的大小为int*且n始终为1
因此
for(arr_count = 0; arr_count < n; arr_count++) {
/* some stuff */
}
仅迭代一次。此处
#include<iostream>
const char* findNumber(int arr_count, int arr[], int k)
{
for(int i = 0; i < arr_count ; i++)
{
if(arr[i]==k)
return "YES";
}
return "NO";
}
int main()
{
int array[] = { 2,36,42,8,85,35,225,100};
std::cout << findNumber(sizeof(array)/sizeof(array[0]),array,43) << std::endl;
std::cout << findNumber(sizeof(array)/sizeof(array[0]), array, 85) << std::endl;
return 0;
}
编译器将int-arr[]更改为int*arr,这是因为。所以当你这么做的时候
int n = sizeof(arr)/sizeof(arr[0]);
sizeofarr的大小为int*且n始终为1
因此
for(arr_count = 0; arr_count < n; arr_count++) {
/* some stuff */
}
只迭代一次
#include<iostream>
const char* findNumber(int arr_count, int arr[], int k)
{
for(int i = 0; i < arr_count ; i++)
{
if(arr[i]==k)
return "YES";
}
return "NO";
}
int main()
{
int array[] = { 2,36,42,8,85,35,225,100};
std::cout << findNumber(sizeof(array)/sizeof(array[0]),array,43) << std::endl;
std::cout << findNumber(sizeof(array)/sizeof(array[0]), array, 85) << std::endl;
return 0;
}
好了。固定和工作良好。输出否,然后是
好了。固定和工作良好。输出否,然后是 如果数组中的第一项不匹配,请考虑打印的内容。搜索完整个数组后,else应该在循环中还是在末尾处理?找到物品后,有什么理由继续吗?二进制搜索不适用于此任务,除非数组已排序或足够大,以至于排序和二进制搜索的成本通常小于线性搜索。当他们将数组的大小作为第一个参数提供给您时,为什么要计算数组的大小?此外,char*是返回YES的错误返回类型;,它应该是const char*。哦,如果他们给了你这个破碎的函数签名,你可能想找一些其他的编码熟练度测试。这是一个快速测试。系统会在90秒内自动倒计时以完成此操作。由于匆忙,我在Arr.Cube部分变得越来越傻。如果数组中的第一个项目不匹配,请考虑打印什么。搜索完整个数组后,else应该在循环中还是在末尾处理?找到物品后,有什么理由继续吗?二进制搜索不适用于此任务,除非数组已排序或足够大,以至于排序和二进制搜索的成本通常小于线性搜索。当他们将数组的大小作为第一个参数提供给您时,为什么要计算数组的大小?此外,char*是返回YES的错误返回类型;,它应该是const char*。哦,如果他们给了你这个破碎的函数签名,你可能想找一些其他的编码熟练度测试。这是一个快速测试。系统会在90秒内自动倒计时以完成此操作。由于匆忙,我在arr_计数部分变得很傻。所以我应该编辑n=sizeofarr?我在Geeksforgek的网站上查过,他们总是这样做。我们什么时候可以使用我的声明?@HectorTa我想数组的大小在第一个参数arr\u count中。通常当你传递一个数组时,你传递给它一对参数:array\u本身,array\u size。正如@Galik所指出的,arr_count是本例中的数组大小。参数的顺序似乎相反,所以我应该编辑n=sizeofar?我在Geeksforgek的网站上查过,他们总是这样做。我们什么时候可以使用我的声明?@HectorTa我想数组的大小在第一个参数arr\u count中。通常当你传递一个数组时,你传递给它一对参数:array\u本身,array\u size。正如@Galik所指出的,arr_count是本例中的数组大小。参数的顺序似乎是相反的。你能告诉我如何避免数组衰减吗?在我的例子中,我是否只需要修改为n=sizeofarr?@HectorTa这不是arr_count的作用吗?@HectorTa如果arr_count是数组中的元素数,那么使用like forint itr=0;itr