在主函数中输入 5 个字符串,利用指针方法,在另一函数中从 大到小排序,最后再主函数中输出。
时间: 2024-02-12 07:08:58 浏览: 25
好的,这是一个需要利用指针传递参数的问题,下面是一份示例代码:
```c
#include <stdio.h>
#include <string.h>
void sort_strings(char **strings, int num)
{
int i, j;
char *temp;
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (strcmp(strings[i], strings[j]) < 0) {
temp = strings[i];
strings[i] = strings[j];
strings[j] = temp;
}
}
}
}
int main()
{
char *strings[5];
int i;
// 输入五个字符串
for (i = 0; i < 5; i++) {
printf("请输入第%d个字符串:", i + 1);
char str[100];
scanf("%s", str);
strings[i] = strdup(str);
}
// 排序
sort_strings(strings, 5);
// 输出结果
printf("排序后的字符串:\n");
for (i = 0; i < 5; i++) {
printf("%s\n", strings[i]);
}
// 释放内存
for (i = 0; i < 5; i++) {
free(strings[i]);
}
return 0;
}
```
这个程序中,我们首先定义了一个 `sort_strings` 函数来对字符串进行排序。它接受两个参数:一个是字符串数组,另一个是数组中字符串的数量。在函数内部,我们使用双重循环来比较每两个字符串之间的大小关系,如果前者比后者小,则交换它们的位置。
在 `main` 函数中,我们首先定义了一个字符串指针数组 `strings`,然后使用循环来读入五个字符串,并将它们存储到数组中。接下来,我们调用 `sort_strings` 函数来对这些字符串进行排序。最后,我们再次使用循环来输出排序后的结果,并释放之前分配的内存。
需要注意的是,在这个示例程序中,我们使用了 `strdup` 函数来复制字符串并分配内存。这是因为原始的 `scanf` 函数只能将字符串存储到栈上,而不是堆上。如果我们不使用 `strdup` 函数来复制字符串,那么在程序的后续步骤中可能会发生未定义的行为。