从键盘读入不多于20个字符串,组成一个字符串数组,应用qsort函数进行排序。编译指令,指定C99标准。中文提示输出。不能段错误(吐核)
时间: 2024-12-10 08:55:35 浏览: 22
首先,你需要编写一个程序来从键盘读取不超过20个字符串并存储到一个动态分配的字符串数组中。然后,使用C标准库中的`qsort`函数对这个数组进行排序。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义比较字符串的辅助函数
int compare_strings(const void *a, const void *b) {
return strcmp(*(const char **)a, *(const char **)b);
}
void input_strings(char ***arr, int *size) {
printf("请输入字符串,最多20个,输入空行结束:\n");
*size = 0;
while (true) {
char* str = malloc(sizeof(char*) * 100); // 预留空间以防意外长的字符串
fgets(str, sizeof(str), stdin);
if (!strcmp(str, "\n")) { // 输入空行结束
break;
}
// 检查是否超过大小限制,并添加字符串到数组
if (*size < 20) {
(*arr)[*size] = str;
(*size)++;
} else {
printf("已达到最大字符串数限制,无法继续输入。\n");
free(str);
break;
}
}
}
int main() {
int size;
char **str_array = malloc(sizeof(char*) * 20); // 动态分配足够大的数组
input_strings(&str_array, &size);
// 使用qsort对字符串数组进行升序排列
qsort(str_array, size, sizeof(char*), compare_strings);
printf("排序后的字符串数组如下:\n");
for (int i = 0; i < size; i++) {
printf("%s\n", str_array[i]);
}
// 释放内存
for (int i = 0; i < size; i++) {
free(str_array[i]);
}
free(str_array);
return 0;
}
```
编译指令(假设你已经安装了GCC,使用C99标准):
```bash
gcc -std=c99 -o string_sort program_name.c
```
运行程序:
```bash
./string_sort
```
当你运行这个程序,它会提示你逐个输入字符串,结束后会显示按字母顺序排序的结果。
注意:此程序在用户输入的最后一个非空行之后停止接受输入。如果希望允许用户在空行之后继续输入直到按下Enter键,你可以修改`input_strings`函数。
阅读全文