字符串字母排序-C

时间:2014-05-12 06:57:56

标签: c arrays sorting

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

我该如何实现?请帮忙。

1 个答案:

答案 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'}