题目描述 用字符指针数组实现:在主函数中输入10个字符串,用另一函数对它们升序排序,然后在主函数输出这10个已排好序的字符串。 输入 输入10个字符串(长度均不超过80),以换行分隔。 输出 输出已升序排好的10个字符串,以换行分隔。 样例输入 January February March April May June July August September October 样例输出 April August February January July June March May October September c语言
时间: 2024-02-25 12:54:23 浏览: 72
好的,这是一道关于字符串排序的题目。下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
void sort(char *str[], int n);
int main() {
char *str[10];
int i;
printf("请输入10个字符串:\n");
for (i = 0; i < 10; i++) {
str[i] = (char*) malloc(81 * sizeof(char));
scanf("%s", str[i]);
}
sort(str, 10);
printf("排序后的字符串为:\n");
for (i = 0; i < 10; i++) {
printf("%s\n", str[i]);
free(str[i]); // 释放内存
}
return 0;
}
void sort(char *str[], int n) {
int i, j;
char *temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (strcmp(str[j], str[j+1]) > 0) {
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
}
```
解释一下代码:
1. 首先定义了一个字符指针数组 `str`,用来存放输入的10个字符串;
2. 使用 `malloc` 函数为每个字符串动态分配了一个长度为 81 的内存空间,用来存储输入的字符串;
3. 通过 `scanf` 函数获取输入的10个字符串;
4. 调用 `sort` 函数对这10个字符串进行升序排序;
5. 在 `sort` 函数中,使用了冒泡排序算法,通过 `strcmp` 函数比较字符串的大小,实现了升序排序;
6. 在最后的输出中,使用了 `free` 函数释放了为每个字符串分配的内存空间,避免了内存泄漏问题。
注意:字符指针数组可以用来存放多个字符串,每个字符串都是一个字符数组,通过动态分配内存空间可以避免数组长度限制的问题。而在使用完动态分配的内存空间后,需要使用 `free` 函数释放内存空间,避免内存泄漏问题。
阅读全文