用C语言编写:对n个不等长的字符串进行字典顺序排序,各字符串长度存放在数组len中 sort_str( char* str[], int len[], int n )
时间: 2024-11-06 09:15:47 浏览: 33
在C语言中,对不等长的字符串进行字典序排序,并存储各自长度,你可以使用`qsort`函数配合自定义的比较函数。假设我们有一个结构体`str_info`来组合字符串和它的长度:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 结构体,包含字符串和长度
typedef struct {
char *str;
int len;
} StrInfo;
// 比较函数,用于qsort
int compare(const void *a, const void *b) {
const StrInfo *strA = (StrInfo *)a;
const StrInfo *strB = (StrInfo *)b;
return strcmp(strA->str, strB->str); // 字符串比较,升序
}
void sort_str(char **strs, int *len, int n) {
StrInfo arr[n]; // 创建临时数组存放数据
// 将输入的指针和长度复制到结构体数组中
for (int i = 0; i < n; ++i) {
arr[i].str = strs[i];
arr[i].len = len[i];
}
qsort(arr, n, sizeof(StrInfo), compare); // 对arr进行排序
// 将排序后的结果复制回原指针数组
for (int i = 0; i < n; ++i) {
strcpy(strs[i], arr[i].str);
}
}
int main() {
char *strs[] = {"abc", "defg", "xyz"};
int len[] = {3, 4, 3};
int n = sizeof(strs) / sizeof(strs[0]);
sort_str(strs, len, n);
for (int i = 0; i < n; ++i) {
printf("Sorted string %d: %s\n", i+1, strs[i]);
}
return 0;
}
```
在这个例子中,`sort_str`函数首先创建了一个临时的`StrInfo`数组,然后将输入的字符串和长度复制进去并排序。最后,再把排序的结果复制回原始的字符串指针数组。
阅读全文