#include<stdio.h>
#include<stdlib.h>
#define N 17
int delete_repeat(int* b,int len)//用int型,方便返回操作后的数组长度,方便后续打印
{
int* p,*i,*p1;//p指向目标元素
p = i = p1 = b;//初始化各个函数指针
i++;//i指向对比元素
while ( i < b+len)
{
if (*p == *i)
{
for (p1=i ; p1 < b+len; p1++) //p1每次累加完成后,重置为i的起始地址
{
*(p1) = *(p1 +1);//p1操作数组整体向前移动,并覆盖i所指向的相同元素
}
len--;//由于整个数组向前移动一格,数组长度相应减一
}
else {
p++;//当p和i的值不同时,将p指向i的位置
i++;//i指向后一个数
}
}
return len;
}
void print_int(int* a,int n)//打印数组
{
for (int i = 0; i < n; i++)
{
printf("%3d", a[i]);
}
}
int comp(const void* a, const void* b)//排序从小到大
{
return *(int*)a - *(int*)b;//从大到小:将a b调换
}
int main()
{
int a[N] = { 1,1,1,2,1,1,2,2,9,2,2,5,1,5,9,9,56 };
int i;
qsort(a, N, sizeof(int), comp);//整理数组方便删除操作
i=delete_repeat(a,N);//从内存层面,删除相同元素,并返回给i操作后的长度
print_int(a,i);//打印长度为i的数组a
system("pause");
}
输出结果是:1 2 5 9 56