輸入 N 個長度為 2 的字符串,按字典序升序輸出。
示例:`ab jh ac aa bn` → `aa ab ac bn jh`
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000
#define STR_LEN 2
// qsort 比較函數:字符串指針轉換後調用 strcmp
int cmp_str(const void *a, const void *b) {
const char *sa = *(const char**)a;
const char *sb = *(const char**)b;
return strcmp(sa, sb);
}
int main() {
int n;
if (scanf("%d", &n) != 1 || n <= 0 || n > MAX_N) return 1;
// 動態分配指針數組
char **arr = malloc(n * sizeof(char*));
char buf[STR_LEN + 2]; // 讀取緩衝
for (int i = 0; i < n; i++) {
scanf("%2s", buf); // 限制讀取寬度防溢出
arr[i] = malloc(STR_LEN + 1);
strcpy(arr[i], buf);
}
qsort(arr, n, sizeof(char*), cmp_str);
for (int i = 0; i < n; i++) {
printf("%s%c", arr[i], (i == n-1) ? '\n' : ' ');
free(arr[i]);
}
free(arr);
return 0;
}
typedef struct { char str[3]; } Str2;
int cmp_str2(const void *a, const void *b) {
return strcmp(((Str2*)a)->str, ((Str2*)b)->str);
}
// 使用 Str2 arr[MAX_N],qsort(arr, n, sizeof(Str2), cmp_str2);