【问题标题】:sorting suffixes by qsort按 qsort 排序后缀
【发布时间】:2013-10-10 01:59:00
【问题描述】:

我试图通过 qsort() 对字符串的后缀进行排序,但没有得到排序列表。

我该怎么办?
这是我所做的:

char str[MAXN]="banana", *a[MAXN];

for(i=0;i<strlen(str);i++)
   a[i]=&str[i];  //a[] points to suffixes starting

qsort(a, n, sizeof(char *), compare);

这是我的 compare() 函数:

int compare(const void* p, const void* q)
{
     char *a= (char*)p;
     char *b= (char*)q;

    return strcmp(a,b);
}

a[i] points to i'th suffix of str = "banana"
a[0]: banana    
a[1]: anana    
a[2]: nana    
a[3]: ana
a[4]: na
a[5]: a

after qsort() i want to get :

a[0]: a
a[1]: ana
a[2]: anana
a[3]: banana
a[4]: na
a[5]: nana

问题是我得到了未排序的列表。

【问题讨论】:

  • n 在哪里?是size_t n = strlen(str);吗?

标签: c sorting pointers suffix-array


【解决方案1】:

compare 函数接收指向数组中项目的指针。由于这里的数组项是指向char的指针,所以它接收到的是指向char的指针:

int compare(const void* p, const void* q)
{
     char **a= (char**)p;
     char **b= (char**)q;

    return strcmp(*a,*b);
}

【讨论】:

  • 你正在传递n=0。这意味着 0 个项目已排序。
猜你喜欢
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
相关资源
最近更新 更多