【发布时间】:2019-03-15 10:03:42
【问题描述】:
我正在尝试创建一个调用 2 个函数的简单程序。第一个函数接受一个部分填充的数组,循环遍历它并删除任何重复的值。当从数组中删除一个值时,剩余的数字将向后移动以填补空白,即当函数完成时,数组的所有空值将在最后一起。
第二个函数打印更新后的数组。
我当前的代码如下。目前,当我运行我的代码时,控制台显示: 2 6 0 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460。如果它工作正常,它应该显示:1 2 5 6。
另外,我不知道如何将数组的剩余元素向后移动,以便空值在最后一起出现。
#include "pch.h"
#include <iostream>
using namespace std;
void deleteRepeats(int *arr, int arraySize, int& posUsed);
void printArray(int *arr, int arraySize);
int main()
{
int arr[10] = { 1, 2, 2, 5, 6, 1};
int posUsed = 6;
int arraySize = 10;
deleteRepeats(arr, arraySize, posUsed);
printArray(arr, arraySize);
return 0;
}
void deleteRepeats(int *arr, int arraySize, int& posUsed)
{
{
for (int i = 0; i < arraySize; i++)
{
for (int j = i; j < arraySize; j++)
{
if (arr[i] == arr[j])
{
for (int k = j; k < arraySize; k++)
{
arr[k] = arr[k + 1];
}
posUsed--;
}
else
j++;
}
}
}
}
void printArray(int *arr, int arraySize)
{
for (int i = 0; i < arraySize; i++)
{
cout << arr[i] << " ";
}
}
【问题讨论】:
-
arr只能容纳 6 个元素,但您设置了arraySize = 10。你可以改成int arr[10] = { 1, 2, 2, 5, 6, 1 }; -
是否有可能使用
std::vector或std::array? -
谢谢@JohnnyMopp 我已经更正了。尽管我在控制台显示没有输出时遇到了同样的问题。 Micha,我的讲师不希望我们使用向量,因为我们还没有介绍它们
-
另外,
arr[k] = arr[k + 1];将在k = arraySize - 1时读取数组末尾。 -
在
for循环中,您需要使用posUsed而不是arraySize。
标签: c++ arrays duplicates