c语言 //编写函数,对strArr数组中的元素按照字符串长度(strlen()>strlen()) 排序
时间: 2024-11-13 09:25:25 浏览: 31
在C语言中,为了对字符串数组按长度进行排序,你可以使用`qsort()`函数结合自定义的比较函数。首先,你需要声明一个结构体来包装字符串及其长度,然后定义比较函数`compareStrings()`, 再将这个函数作为`qsort()`的第一个参数传递。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 结构体来存储字符串和长度
typedef struct {
char *str;
int len;
} StrElement;
// 比较函数,用于qsort()
int compareStrings(const void *a, const void *b) {
StrElement *sa = (StrElement *)a;
StrElement *sb = (StrElement *)b;
return (sa->len > sb->len) ? 1 : ((sa->len < sb->len) ? -1 : 0);
}
// 函数原型,假设strArr是一个已初始化的字符串数组
void sortByLength(char **strArr, int count) {
StrElement arr[count];
for(int i = 0; i < count; i++) {
arr[i].str = strArr[i];
arr[i].len = strlen(strArr[i]);
}
qsort(arr, count, sizeof(StrElement), compareStrings);
// 将排序后的元素复制回原数组(这里是简化版,实际项目需要考虑内存分配)
for(int i = 0; i < count; i++) {
strcpy(strArr[i], arr[i].str);
}
}
int main() {
char *strArr[] = {"hello", "world", "short", "longest"};
int count = sizeof(strArr) / sizeof(strArr[0]);
sortByLength(strArr, count);
for(int i = 0; i < count; i++) {
printf("%s ", strArr[i]);
}
printf("\n");
return 0;
}
```
在这个例子中,`sortByLength()`函数接受一个字符串指针数组和其大小,然后调用`qsort()`对结构体数组进行排序。注意,在实际应用中,如果数组很大或者频繁排序,最好避免直接修改输入数组,而是创建一个新的排序结果。
阅读全文