#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体
typedef struct {
char *str;
int num;
} MyStruct;
// 比较函数,用于qsort进行字典序比较
int compare(const void *a, const void *b) {
MyStruct *structA = (MyStruct *)a;
MyStruct *structB = (MyStruct *)b;
return strcmp(structA->str, structB->str);
}
int main() {
int n;
printf("请输入结构体数组的大小: ");
if (scanf("%d", &n) != 1) {
fprintf(stderr, "输入错误\n");
return 1;
}
MyStruct *arr = (MyStruct *)malloc(n * sizeof(MyStruct));
if (arr == NULL) {
fprintf(stderr, "内存分配失败\n");
return 1;
}
for (int i = 0; i < n; i++) {
char temp[100];
printf("请输入第 %d 个字符串: ", i + 1);
if (scanf("%99s", temp) != 1) {
fprintf(stderr, "输入错误\n");
for (int j = 0; j < i; j++) {
free(arr[j].str);
}
free(arr);
return 1;
}
arr[i].str = (char *)malloc((strlen(temp) + 1) * sizeof(char));
if (arr[i].str == NULL) {
fprintf(stderr, "内存分配失败\n");
for (int j = 0; j < i; j++) {
free(arr[j].str);
}
free(arr);
return 1;
}
strcpy(arr[i].str, temp);
printf("请输入第 %d 个整数: ", i + 1);
if (scanf("%d", &arr[i].num) != 1) {
fprintf(stderr, "输入错误\n");
free(arr[i].str);
for (int j = 0; j < i; j++) {
free(arr[j].str);
}
free(arr);
return 1;
}
}
qsort(arr, n, sizeof(MyStruct), compare);
printf("排序后的结果:\n");
for (int i = 0; i < n; i++) {
printf("字符串: %s, 整数: %d\n", arr[i].str, arr[i].num);
free(arr[i].str);
}
free(arr);
return 0;
}