gpt4 book ai didi

c - 从动态数组 C 中删除元素

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:13 25 4
gpt4 key购买 nike

我正在为我的类(class)做一些练习,但我遇到了一个问题。练习要求用文件中的数据填充动态数组,对数据进行排序,然后删除重复数据。我的问题在最后一个,我无法删除重复的数字。

这是我的代码:

int main(){
FILE *f;
int *v;
int n=0,i,j;

f=fopen("InteirosComRepetidos.txt","r");
v=(int*)malloc(sizeof(int));

while(!feof(f)){
v=(int*)realloc(v,(n+1)*sizeof(int));
fscanf(f,"%d\n",&v[n]);
n++;
}

OrdenarQuicksort(v,0,n);

for(i=0;i<n;i++){
printf("%d\n",v[i]);
}
//Trying to remove the duplicate
for(j=n;j>=0;j--){
if(v[j]==v[j-1])
v=(int*)realloc(v,(n-1)*sizeof(int));
}

printf("Retirados:\n");
for(i=0;i<n;i++){
printf("%d\n",v[i]);
}
system("pause");
return 0;}

谁能帮帮我?

最佳答案

这个:

for(j=n;j>=0;j--){
...
}

应该是:

for(j=n-1;j>=0;j--){
...
}

否则你就出界了。

比这个:

if(v[j]==v[j-1])
v=(int*)realloc(v,(n-1)*sizeof(int));

正在重新分配但不删除 double 。意思是如果你有

1 2 2 5

这段代码所做的就是删除 5 所以你最终会得到

1 2 2

如果您重新分配和缩小内存中的数组不会移动,它会留在原处,因此在许多情况下您仍然可以访问 5

关于c - 从动态数组 C 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com