我是C语言的初学者,正在努力删除C语言数组中重复的元素
我可以过滤掉该元素,但是最后该元素的位置将仅被0
替换,并且不会消失
这里是代码:
#include <stdio.h>
int main()
{
int arr[6] = {1,2,3,3,8,5};
int newArr[6] = {};
int temp,i,j;
for(i = 0; i < 6; i++){
for(j = i+1; j <= 6; j++){
if(arr[i] != arr[j]){
newArr[i] = arr[i];
break;
}else{
continue;
}
}
temp = j;
i = temp-1;
}
for(int k = 0; k < 6; k++){
printf("%d,", newArr[k]);
}
return 0;
}
结果是:1,2,3,0,8,5
预期结果:1,2,3,8,5
请帮助
这是我的解决方案。无需创建新数组
#include <stdio.h>
int main()
{
int arr[6] = {1,2,3,3,8,5};
int temp,i,j, size = 6;
for(i = 0; i < size; i++){
for(j = i+1; j < size; j++){
if(arr[i] == arr[j]){
for(int k = j; k < size; k++){
arr[k] = arr[k+1];
}
size--;
j--;
}
}
}
for(int k = 0; k < size; k++){
printf("%d,", arr[k]);
}
return 0;
}
感谢所有帮助
您的代码是错误的,因为for(j = i+1; j <= 6; j++)
在某一时刻指向甚至不存在的第7个元素。
现在是要使用的算法/方法:
arr
,这可能会误导您。使用某种排序机制(例如合并排序或快速排序进行排序,这是排序数组中的更改检测机制,其中重复元素将被标记为0。
int index=0;
int change_detector = INT_MAX; //a macro - google it
unsigned int siz = sizeof(arr)/sizeof(arr[0]); //arr represents sorted array
for(;index<siz;index++)
{
if(arr[index] != change_detector)
{
change_detector = arr[index];
}
else
{
arr[index]=0; //marking the duplicate element as 0
}
}
//print the array to check the result