我的程序的目标是找到用户在整数数组中输入的数字(数组是自动创建的),并显示该数字的索引(或数字,如果它们多次出现)。当所需数字在数组中只出现一次时,它可以正常工作。例如,如果有数组
7 8 0 4 2 7 2
并且用户输入" 8",程序的输出将是
Index of the number you entered is: 2
但是当我们有阵列时:
0 5 3 9 3 7 2
用户输入" 3",输出
Index of the number you entered is: 3
我想知道如何使该计划包括第二个" 3"编号为5的程序代码:
#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;
int i, N;
int LinearSearch(int Array[], int searchValue)
{
for (i=0; i<N; i++)
{
if (Array[i]==searchValue)
return i;
}
return -1;
}
int main()
{
int searchValue, Array[1000];
cout<<"Size of array: ";
cin>>N;
cout<<"Array: ";
for (i=0; i<N; i++)
{
Array[i]=rand()%10;
cout<<Array[i]<<" ";
}
cout<<"Search value: ";
cin>>searchValue;
if (LinearSearch(Array, searchValue)==1)
cout<<"\nIndex of the number you entered is: "<<LinearSearch(Array, searchValue)+1;
else
cout<<"\nNothing found";
}
答案 0 :(得分:2)
您可以通过两种方式完成此操作: 1.将LinearSearch的返回值更改为vector,将其写为:
vector<int> LinearSearch(int Array[], int searchValue)
2.在参数中添加一个矢量引用变量,它应该是这样的:
int LinearSearch(int Array[], int searchValue, vector<int> &results)
LinearSearch中的方法体应该没有相应的变化。
答案 1 :(得分:0)
因为您在找到值后立即从搜索功能返回:
for (i=0; i<N; i++)
{
if (Array[i]==searchValue)
return i; // <-- as soon as we get here, we break the loop
}
因此,您将获得searchValue
所在的第一个位置,即2(从0开始)。因此,你得到2 + 1 = 3.要得到最后一个,你必须删除提前退出,并将当前索引保存在变量中,如下所示:
int LinearSearch(int Array[], int searchValue) {
int index = -1;
for (i = 0; i < N; i++) {
if (Array[i]==searchValue) {
index = i;
}
}
return index;
}