我想按字母顺序对char数组进行排序。我使用了这个功能:

int cchars(const char* a, const char *b)
{ char temp=*a-*b;
    if (temp>0)
        return 1;
    else if(temp<0)
        return -1;
    else
        return 0;

}


我用这个:

qsort(larray,counter,sizeof(char),cchars);


有效。

但是我需要从该数组中省略相同的字符。
例如,如果我的数组是:
{'a','z','f','m','d','a'}

它必须返回为:

{'a','d','f','m','z'}

我该如何实施?请帮忙。

最佳答案

排序之后,最容易删除重复项,因为它们会彼此相邻。只需遍历带有两个迭代器的数组,一个迭代器始终向前移动,而另一个迭代器仅在下一个元素不是重复元素时才向前移动:

int i, j;
char prev = -1;
for (i = j = 0; i < (sizeof cchars); i++)
  if (prev != cchars[i])
    prev = cchars[j++] = cchars[i];


之后,您可能还需要用NUL字符填充数组的其余部分:

 memset(cchars + j, 0, (sizeof cchars) - j);


在qsort之后应用的代码将转换为:

{'a','z','f','m','d','a'}{'a', 'd', 'f', 'm', 'z', '\0'}

10-06 02:07