既然已经排序好了的就简单了
#include
void get(int *numIn,int len,int * numOut,int *outLen)
{
int i,j;
j = 0;
i = 0;
*(numOut + j) = *(numIn + i);
for(i = 0;i < len;i++)// for(i = 1;i < len;i++) 更好
{
if(*(numOut + j)) != *(numIn + i))
{
j++;
*(numOut + j) = *(numIn + i);
}
}
*outLen = j + 1;//长度为最大下标加 1
}
void main()
{
int i;
int numList[10] = {5,5,6,6,8,8,8,8,12,12};
int numOut[10] = {0};
int outLen = 0;
get(numList,10,numOut,&outLen);
for(i = 0;i < outLen;i++)
{
printf("%d ",*(outLen + i));
}
}
这个简单,假设是数组的话并且已经排好序,如你的示例所说。
#include
#include
int* unique (int* first, int* last);
int main() {
int a[] = {5,5,6,6,8,8,8,8,12,12};
int * end = unique(a, a + 10);
for (int* start = a; start != end; start++)
{
printf("%d ", *start);
}
return 0;
}
int* unique (int* first, int* last)
{
if (first==last) return last;
int * result = first;
while (++first != last)
{
if (!(*result == *first))
*(++result)=*first;
}
return ++result;
}
http://jingyan.baidu.com/article/0aa22375b3c5a688cc0d6423.html 在这个基础上修改一下就能做到,用到它的查询和输出。思考一下,如果不懂可以追问。