题目

从标准输入读入多个英文单词,存入指针数组中,调用 qsort 库函数按字典序从小到大排序并依次输出。

输入格式:第一行输入单词个数 n;随后 n 行每行输入一个单词。

输出格式:按字典升序输出排序后的单词,每行一个。

数据范围与约定:1 ≤ n ≤ 50,单词长度不超过 30 字符。

思路与算法

1. 指针数组模型
String / char[]words[n]; 是一个存放指针的数组,每个指针指向一个单词字符串的首地址,排序时只需交换指针本身,无需大块拷贝字符串。

2. qsort 比较函数规范
比较函数参数为 const void *a, const void *b,强转二级指针 const String / char[]*p1 = (const String / char[]*)a;,通过 strcmp(*p1, *p2) 比较字符串字典序。

完整程序

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        if (!sc.hasNext()) {
            return;
        }
        // 兼容单行输入空格分隔或多行输入单词
        java.util.List<String> list = new java.util.ArrayList<>();
        while (sc.hasNext()) {
            String token = sc.next();
            // 若首个 token 为整数,则作为数量读取
            if (list.isEmpty()) {
                try {
                    int n = Integer.parseInt(token);
                    for (int i = 0; i < n && sc.hasNext(); i++) {
                        list.add(sc.next());
                    }
                    break;
                } catch (NumberFormatException ignored) {
                    list.add(token);
                }
            } else {
                list.add(token);
            }
        }

        String[] words = list.toArray(new String[0]);
        // 字典序排序
        Arrays.sort(words);

        for (String w : words) {
            System.out.println(w);
        }
    }
}

运行示例

输入:

pear apple fig

输出:

apple
fig
pear