在主函数中输入10个不等长的字符串。用另一个函数对它们排序。然后在主函数输出这10个已排好序的字符串。用c语言指针处理
时间: 2023-01-28 22:45:10 浏览: 99
在主函数中,可以定义一个字符串数组,然后用循环读入10个字符串:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
void sort_strings(char **strings, int n);
int main(int argc, char **argv) {
char **strings = malloc(sizeof(char*) * N);
for (int i = 0; i < N; i++) {
printf("请输入第 %d 个字符串: ", i + 1);
strings[i] = malloc(sizeof(char) * 100); // 分配内存
scanf("%s", strings[i]);
}
sort_strings(strings, N);
printf("排序后的字符串如下:\n");
for (int i = 0; i < N; i++) {
printf("%s\n", strings[i]);
free(strings[i]); // 释放内存
}
free(strings); // 释放内存
return 0;
}
```
对字符串排序的函数可以使用快速排序或归并排序等算法。这里以快速排序为例:
```
void sort_strings(char **strings, int n) {
if (n <= 1) return;
int pivot = rand() % n;
char *temp = strings[pivot];
strings[pivot] = strings[n - 1];
strings[n - 1] = temp;
int i = 0, j = n - 2;
while (i <= j) {
if (strcmp(strings[i], temp) < 0) {
i++;
} else {
temp = strings[i];
strings[i] = strings[j];
strings[j] = temp;
j--;
}
}
strings[n - 1] = strings[i];
strings[i] = temp;
sort_strings(strings, i);
sort_strings(strings + i + 1, n - i - 1);
}
```
注意在使用完字符串数组后,要释放动态分配的内存。
阅读全文