我想按字母顺序对 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'}
。
关于字符数组按字母顺序排序-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23602814/