我想按字母顺序对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);
它奏效了。
但是我需要从这个数组中省略相同的字符。 例如,如果我的数组是: { '一个', 'Z', 'F', 'M', 'd', '一个'}
必须以:
返回{ '一个', 'd', 'F', 'M', 'Z'}
我该如何实现?请帮忙。
答案 0 :(得分:3)
最简单的方法是在排序后删除重复项,因为它们将彼此相邻。只需使用两个迭代器遍历数组,一个始终向前移动,另一个只有在下一个元素不重复时向前移动:
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'}
。