C:从完整阵列中删除,仅删除第一个重复实例
我有一个试图从中删除值的数组,但在尝试从数组中删除时遇到了两个问题: 1.)当我尝试从已满的数组中删除时,我会检测到一个*堆栈崩溃*错误 2.)当我的数组有多个副本时,我只想删除第一个实例,但它似乎删除了随机数目的实例 我为remove函数编写的代码如下:C:从完整阵列中删除,仅删除第一个重复实例,c,arrays,C,Arrays,我有一个试图从中删除值的数组,但在尝试从数组中删除时遇到了两个问题: 1.)当我尝试从已满的数组中删除时,我会检测到一个*堆栈崩溃*错误 2.)当我的数组有多个副本时,我只想删除第一个实例,但它似乎删除了随机数目的实例 我为remove函数编写的代码如下: int Remove(int* array, int arrayLen, int removeNum) { int i, j; for (i = 0; i < arrayLen; i++) { if (array[i]
int Remove(int* array, int arrayLen, int removeNum)
{
int i, j;
for (i = 0; i < arrayLen; i++)
{
if (array[i] == removeNum){
for(j = i; j < arrayLen; j++){
array[j] = array[j+1];
}
arrayLen--;
}
}
return arrayLen;
}
int-Remove(int*array、int-arrayLen、int-removeNum)
{
int i,j;
对于(i=0;i
其中,removeNum是用户在main()中选择的 我看到两个问题:
j=arrayLen-1
,j+1=arrayLen
,它超过了数组的末尾。)返回
(或中断
)可以修复该问题int remove(int* array, int arrayLen, int removeNum)
{
int i, j;
for (i = 0; i < arrayLen; i++)
{
if (array[i] == removeNum) {
// Stop j at arrayLen - 1, which is the new end of the array
for(j = i; j < arrayLen - 1; j++) {
array[j] = array[j + 1];
}
// Return the new size
return arrayLen - 1;
}
}
// If we didn't remove anything, return the original size
return arrayLen;
}
int-remove(int*array、int-arrayLen、int-removeNum)
{
int i,j;
对于(i=0;i
在找到第一个匹配项后,必须从外部循环中断。如果数组中元素的顺序无关紧要,可以通过将最后一个元素移动到要删除的元素上,然后说大小较短来加快“删除”过程。这涉及到更少的数据移动,但如果(很可能)顺序很重要,则可能不合适。“删除…重复项”误导。函数在查找目标元素(如果有)时“收缩”数组。函数本身没有删除“复制”属性。还有一个好问题。不得不说,当编译与标准库冲突的代码时,您没有收到标识符警告/错误,这有点奇怪,除非使用此功能的模块从未包含stdio.h
,当然。添加返回值解决了仅删除第一个实例的问题,但是出于某种原因,将jint main()
测试代码,您正在使用该代码构建作为问题一部分传递到函数中的数组。是的,我猜arrayLen
是错的?如果看不到阵列的实际分配/构造,就无法知道。