题目
从标准输入读入多个英文单词,存入指针数组中,调用 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