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

时间:2018-11-18 03:42:13

标签: 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_count < n; arr_count++)
  {
     if(arr[arr_count]==k)
       cout<<"YES";
     else
       cout<<"NO";
  }
  return 0;
}

但是当我编译时,它显示输出为空。不知道为什么我解决了许多更困难的问题。因此,当我在一个简单的任务中出错时,我感到非常难过。请告诉我错误的部分。

3 个答案:

答案 0 :(得分:3)

这里

char* (int arr_count, int arr[], int k) { }

由于array decaying,编译器将int arr[]更改为int *arr。所以当你这样做

 int n = sizeof(arr)/sizeof(arr[0]);

sizeof(arr)的大小为int*,而n始终为1

因此而

for(arr_count = 0; arr_count < n; arr_count++) {
   /*  some stuff */
}

仅重复一次。

答案 1 :(得分:2)

  

int n = sizeof(arr)/ sizeof(arr [0]);

至少这是不正确的,因为将数组arr传递给函数时会衰减为指针。

因此sizeof(arr)/sizeof(arr[0])实际上是sizeof(pointer)/sizeof(int)。因此n始终为1。而for循环始终仅运行一次迭代(当arr_count == 0时)。

  

for(arr_count = 0; arr_count

这也是不正确的-因为您不应该修改arr_count,它是输入数组的大小。您应该为循环使用一个单独的变量。

for( int i = 0; i < arr_count; ++i )

答案 2 :(得分:1)

 #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;
 }

你去了。固定且工作正常。输出“否”,然后输出“是”。