在 C++ 中搜索动态分配的数组中的出现次数

Searching the number of occurrences in a dynamically allocated array in C++

本文关键字:数组 搜索 动态分配 C++      更新时间:2023-10-16

这是我用来创建数组的方法。

int* createArray(int N)
{
int* array = new int[N];
for (int i = 0; i < N; i++)
{
int rand_num = rand() % 10;
array[i] = rand_num % 10;
}
return array;
}

这是我用来计算 使用线性搜索的数组

int linearSearch(int* nums, int N, int val)
{
int count = 0;
for (int i = 0; i <= N; i++)
{
if (val == *nums)
{
count+=1;
}
}
return count;
}

这是主要方法。线性搜索方法返回 1 偶数 虽然数组中有两个 1。如何解决这个问题?

int main()
{
int N = 5;
int* arr =  createArray(N);
for (int i = 0; i < N; i++)
{
cout << *arr++ << " " << endl;
}
cout << linearSearch(arr, N, 1) << " " << endl;
return 0;
}

我认为您不会在函数 shearch 中增加 *nums。

所以你总是与数组[0]进行比较。

你的代码中至少有三个错误!两个在你的linearSearch函数中,其中(a(你不递增if (val == *nums) {行中指向的地址,(b(你用for (int i = 0; i <= N; i++)(大小N数组的最后一个元素有一个索引N-1(在循环中"超出数组的末尾"。这是一个固定版本:

int linearSearch(int* nums, int N, int val)
{
int count = 0;
for (int i = 0; i < N; i++) {
if (val == *nums++) {
count += 1;
}
}
return count;
}

第三个问题也许更微妙。在主代码中,首先将指针分配给createArray返回的地址arr,如下所示:

int* arr = createArray(N);

但是,在输出循环中,您修改(递增(该地址的值:

cout << *arr++ << " " << endl;

因此,当您稍后执行此行linearSearch(arr, N, 1);时,arr的值将是错误的- 并且您得到未定义的行为,试图访问无效内存。

我建议在输出循环中使用数组索引,如下所示:

for (int i = 0; i < N; i++) {
cout << arr[i] << " " << endl;
}

请随时要求进一步澄清和/或解释。