Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查是否出现在数组C++中的数字_C++ - Fatal编程技术网

检查是否出现在数组C++中的数字

检查是否出现在数组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

我做了一个编码样本测试,我认为这很容易。他们要求查找数组中是否出现数字打印输出是或不是打印输出否。首先,我想提出二进制搜索方法。但是当我看到它们给定的函数时,我认为不适合使用这种方法

在描述中,他们提到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_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_计数 这也是不正确的-因为您不应该修改arr_count(输入数组大小)。应该为循环使用单独的变量

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_计数 这也是不正确的-因为您不应该修改arr_count(输入数组大小)。应该为循环使用单独的变量

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山;itr++{}并删除int n=sizeofar/sizeofar[0];声明,因为在这种情况下不需要它。在if条件下使用arr[itr]==k。@HectorTa-无法防止数组衰减。这是该语言的一个核心特征。还有一些替代方法,例如使用标准容器,例如std::vector,它可以提供有关它有多少个元素的信息,而不是原始数组。@pet:通过避免函数签名中的指针类型,可以防止数组到指针的衰减。可以通过值或常量引用传递数组。这需要在编译时知道数组大小。您能告诉我如何避免数组衰减吗?在我的例子中,我是否只需要修改为n=sizeofarr?@HectorTa这不是arr_count的作用吗?@HectorTa如果arr_count是数组中的元素数,那么使用like forint itr=0;itr