用C语言写输入n个字符串(长度小于20)存入二维数组c中,编写程序对其进行排序(由小到大)并按次序输出。 输入 有n+1行,第1行有1整数表示字符串数n;后面有n行数据,每行有1个字符串。 输出 有n行,每行包含有1个字符串。
时间: 2024-09-20 10:05:59 浏览: 74
在C语言中,你可以使用动态内存分配来创建二维字符数组存储字符串,并通过选择合适的排序算法如冒泡排序、快速排序或归并排序对它们进行排序。这里我会给出一种基本的示例,使用插入排序来演示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINES 100 // 假设最多输入100个字符串
#define STRING_LEN 20
// 定义二维字符数组结构体
typedef struct {
char str[STRING_LEN];
} String;
void insertSort(String arr[], int n) {
for (int i = 1; i < n; i++) {
String temp = arr[i];
int j = i - 1;
while (j >= 0 && strcmp(arr[j].str, temp.str) > 0) { // 比较字符串大小
arr[j + 1] = arr[j]; // 移动较大的元素
j--;
}
arr[j + 1] = temp; // 插入排序
}
}
int main() {
int n;
scanf("%d", &n);
// 动态分配二维数组
String* strings = malloc(n * sizeof(String));
if (!strings) {
printf("Memory allocation failed.\n");
return 1;
}
for (int i = 0; i < n; i++) {
scanf("%s", strings[i].str); // 读取字符串
strings[i].str[strlen(strings[i].str)] = '\0'; // 添加终止符
}
insertSort(strings, n); // 对字符串数组进行排序
for (int i = 0; i < n; i++) {
printf("%s\n", strings[i].str);
}
// 释放内存
free(strings);
return 0;
}
```
阅读全文