在 C++ 中搜索动态分配的数组中的出现次数
Searching the number of occurrences in a dynamically allocated array in C++
这是我用来创建数组的方法。
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;
}
请随时要求进一步澄清和/或解释。
相关文章:
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在动态数组上使用搜索函数
- 在 C++ 中搜索动态分配的数组中的出现次数
- 当您在此单词中搜索单词时调整字符数组的大小?
- 在对象数组中搜索字符串并返回相应值的函数
- C++线性搜索算法,确定数组中元素的数量
- 递归二进制搜索与字符串数组
- 变量未在此范围内声明 数组线性搜索
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 运行搜索数组
- 从数组中搜索元素的索引
- 在数组中搜索复杂度高于 O(n) 的元素
- 比较/搜索数组中多个整数的最佳解决方案
- 如何搜索和排序 2D 数组
- 如何在数组中搜索之前已输入的 int 值
- 数组搜索和唯一增值
- 矢量搜索与数组搜索的时间成本
- 每个项目的C 字符串数组搜索输出
- 简单的C++数组搜索
- 针对多个字符串数组搜索字符串