c语言如何写一个qsort排序对一系列长度部分相同部分不同的字符串进行排序,保证最后这一系列字符串按照字典序从小到大的顺序排列?
时间: 2024-12-27 22:32:52 浏览: 33
在 C 语言中,为了对一系列长度部分相同部分不同的字符串进行字典序排序,你可以使用 qsort
函数结合自定义比较函数。qsort
函数需要一个指向数组首元素的指针、数组大小、每个元素的大小以及一个指向比较函数的指针。
首先,定义一个结构体(如 struct StrPair
),包含两个字符串和它们各自的长度,以便处理部分不同的情况:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *str;
size_t len;
} StrPair;
int compare(const void *a, const void *b) {
const StrPair *pa = (const StrPair *) a, *pb = (const StrPair *) b;
// 如果字符串长度相等,则直接比较
if (pa->len == pb->len)
return strcmp(pa->str, pb->str);
// 否则根据长度小的大,即先比较长度再比较字符串
return pa->len - pb->len;
}
然后,在主程序中,你需要创建一个字符串和长度的数组,调用 qsort
函数并传入上面定义的结构体类型和比较函数:
void sort_strings(StrPair *arr, int num_of_pairs) {
qsort(arr, num_of_pairs, sizeof(StrPair), compare);
}
int main() {
StrPair strings[] = {
{"apple", 5},
{"banana", 6},
{"cherry", 5},
{"date", 4},
{"elderberry", 10}, // 示例中的部分不同长度的字符串
// 更多字符串...
};
int num_of_strings = sizeof(strings) / sizeof(strings[0]);
sort_strings(strings, num_of_strings);
for (int i = 0; i < num_of_strings; i++) {
printf("%s (%lu)\n", strings[i].str, (unsigned long)strings[i].len);
}
return 0;
}
这个程序会将给定的字符串数组按照字典序从小到大排序,即使字符串有部分不同的长度。请注意,这里的示例假设字符串数组是在堆上分配的,如果字符串在栈上,你可能需要另外的方式来处理字符串内存。运行完 main
函数后,你会看到按字典序排序后的字符串列表。
阅读全文
相关推荐


















