2.基于字符数组的字符串排序:在主函数中输入10个不等长的字符串放入二维字符数组中,编写函数 sort() 利用指针数组对其排序,在主函数中输出排好序的字符串。 函数原型为:void sort(char *s [ ],int n);
时间: 2025-01-02 22:48:04 浏览: 6
在基于字符数组的字符串排序中,通常我们会使用字符串长度作为排序的关键字,因为不等长的字符串直接比较可能会出现问题。这里是一个简单的示例,我们将使用 C 语言的 qsort 函数配合一个自定义的比较函数来完成这个任务。首先,我们需要准备一个辅助结构体 `struct StrCompare` 来存储字符串及其索引,然后创建一个指向此结构体的指针数组:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体用于存储字符串及其索引
typedef struct {
char* str;
int index;
} StrCompare;
// 自定义比较函数,用于qsort
int compare(const void* a, const void* b) {
StrCompare strA = *((StrCompare*)a);
StrCompare strB = *((StrCompare*)b);
// 比较字符串长度,长度小的排在前面
return strcmp(strA.str, strB.str);
}
// 主函数
void input_strings(StrCompare arr[], int n) {
for (int i = 0; i < n; i++) {
char input[100];
printf("请输入第 %d 个字符串(不超过100个字符):", i + 1);
fgets(input, sizeof(input), stdin);
input[strcspn(input, "\n")] = '\0'; // 去除换行符
arr[i].str = strdup(input);
arr[i].index = i;
}
}
// 对字符串数组进行排序
void sort(char** s, int n) {
StrCompare sortedArr[n];
memcpy(sortedArr, s, sizeof(sortedArr)); // 备份原始数组到临时结构体数组
// 使用qsort对临时结构体数组进行排序
qsort(sortedArr, n, sizeof(sortedArr[0]), compare);
// 输出排序后的字符串
for (int i = 0; i < n; i++) {
printf("%d. %s\n", sortedArr[i].index + 1, sortedArr[i].str);
free(sortedArr[i].str); // 释放内存
}
}
int main() {
int n;
printf("请输入字符串的数量(最多10个): ");
scanf("%d", &n);
if (n > 10 || n <= 0) {
printf("错误:输入的字符串数量应介于1到10之间。\n");
return 1;
}
StrCompare* arr = (StrCompare*)malloc(n * sizeof(StrCompare));
input_strings(arr, n);
sort(arr, n);
free(arr);
return 0;
}
```
在这个示例中,`sort` 函数接收一个指向字符数组的指针以及字符串数量,`input_strings` 函数负责读取用户输入并保存到结构体数组中。然后利用 `compare` 函数在 `qsort` 中进行排序,最后输出排好序的字符串。
阅读全文