编写一个使用字符型指针数组对学生姓名字符串进行排序的程序。 写一个程序,把键盘输入的一组学生的姓名字符串存入一个字符型指针数组中,然后选择一种排序方法对其进行升序排序。要求字符型指针数组中的每个指针指向的空间都要动态申请。 提示:可以先用一个字符型数组过渡,接受键盘输入的字符串,再根据字符串的长度动态申请空间,并让字符指针数组的指针指向它,最后再把字符数组中的字符串复制到指针所指向的空间。
时间: 2024-04-10 12:28:42 浏览: 74
指针数组为字符串排序:1、冒泡排序 2、快速排序
下面是一个使用字符型指针数组对学生姓名字符串进行排序的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LENGTH 100
#define MAX_STUDENTS 10
void sortNames(char** names, int numStudents);
void swap(char** a, char** b);
int main() {
char** names;
int numStudents, i;
printf("请输入学生人数:");
scanf("%d", &numStudents);
// 动态申请字符型指针数组的内存空间
names = (char**)malloc(numStudents * sizeof(char*));
// 读取学生姓名并动态申请内存空间
for (i = 0; i < numStudents; i++) {
char tempName[MAX_NAME_LENGTH];
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", tempName);
// 动态申请内存空间
names[i] = (char*)malloc((strlen(tempName) + 1) * sizeof(char));
// 复制字符串到动态申请的内存空间
strcpy(names[i], tempName);
}
// 对学生姓名进行排序
sortNames(names, numStudents);
// 打印排序后的学生姓名
printf("排序后的学生姓名为:\n");
for (i = 0; i < numStudents; i++) {
printf("%s\n", names[i]);
}
// 释放动态申请的内存空间
for (i = 0; i < numStudents; i++) {
free(names[i]);
}
free(names);
return 0;
}
// 使用冒泡排序对学生姓名进行升序排序
void sortNames(char** names, int numStudents) {
int i, j;
for (i = 0; i < numStudents - 1; i++) {
for (j = 0; j < numStudents - i - 1; j++) {
if (strcmp(names[j], names[j + 1]) > 0) {
swap(&names[j], &names[j + 1]);
}
}
}
}
// 交换两个指针的值
void swap(char** a, char** b) {
char* temp = *a;
*a = *b;
*b = temp;
}
```
这个程序会先读取学生的人数,然后动态申请一个字符型指针数组的内存空间。接着,循环读取每个学生的姓名,动态申请内存空间,并将输入的姓名复制到动态申请的内存空间中。然后,使用冒泡排序对学生姓名进行升序排序,并打印排序后的学生姓名。最后,释放动态申请的内存空间。
请注意,这个示例程序使用冒泡排序进行排序,你也可以使用其他排序算法来实现。
阅读全文