我想按字母顺序对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'}
。