【问题标题】:Searching Index of an Element from Array从数组中搜索元素的索引
【发布时间】:2020-02-08 15:06:22
【问题描述】:

我被困在一个简单而疯狂的搜索算法中。我想从调用函数的数组中找到元素的索引。问题是虽然元素已经存在,但函数返回-1;仅当元素不存在时才应该返回。 这是代码:

#include <iostream>
using namespace std;


int search(int arr[], int size, int val, bool left) {
  int res;
  for (int i = 0; i < size; i++) {
    if(val == arr[i]) {
      res = i;
      break;
    }
    else if(val != arr[i]) {
      res = -1;
    }
  }
  return -1;
}

int main() {

  int arr[] = {1, 4, 6, 5, 2, 7, 10, 4};
  int size = sizeof(arr) / sizeof(arr[0]);

 cout << search(arr,size,6, true) << endl;



  return 0;
}

提前致谢。

【问题讨论】:

  • 也许break 应该是return ......
  • 你应该返回res,而不是-1...
  • 你需要返回 res 而不是 -1
  • 请注意,每次测试失败时都会执行 for 循环中的 else,一次又一次地分配 -1。您可以通过在循环之前使用 -1 初始化 res 并删除 else 来更有效地完成此操作。
  • 你试过调试了吗?尝试用笔和纸手工执行您的算法。

标签: c++ arrays algorithm search


【解决方案1】:

尝试从函数中返回 res

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int search(int arr[], int size, int val, bool left) {
  int res = -1;
  for (int i = 0; i < size; i++) {
    if(val == arr[i]) {
      res = i;
      break;
    }
  }
  return res;
}

int main() {

  int arr[] = {1, 4, 6, 5, 2, 7, 10, 4};
  int size = sizeof(arr) / sizeof(arr[0]);

 cout << search(arr,size,6, true) << endl;

  return 0;
}

【讨论】:

  • 用 -1 启动 res 并去掉 else 更有意义。
【解决方案2】:
for (int i = 0; i < size; i++) {
if(val == arr[i]) {
res = i;
break;
}
else if(val != arr[i]) {
res = -1;
}
}
return -1;

即使元素存在,您也会在 for 循环之外返回 -1。

在for循环上面初始化res变量并返回 res = -1

for循环之后

return res

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 2011-09-08
    • 2015-04-18
    • 2017-04-12
    • 2021-06-03
    • 2012-07-19
    • 2019-12-21
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多