c语言输入姓名/微信名/QQ名,用指针代替下标的方法比较字符串大小,由小到大顺序输出。比较时使用函数调用的方法,字符串比较使用strcmp函数
时间: 2024-03-19 07:43:53 浏览: 66
好的,以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
void sortNames(char **names, int len);
int compareStrings(const void *a, const void *b);
int main() {
int n;
char *names[MAX_LEN];
printf("请输入姓名/微信名/QQ名的个数:");
scanf("%d", &n);
printf("请输入%d个姓名/微信名/QQ名:\n", n);
for (int i = 0; i < n; i++) {
char *name = (char *) malloc(MAX_LEN * sizeof(char));
scanf("%s", name);
names[i] = name;
}
sortNames(names, n);
printf("按字典序从小到大排序后的姓名/微信名/QQ名为:\n");
for (int i = 0; i < n; i++) {
printf("%s\n", names[i]);
}
// 释放动态分配的内存
for (int i = 0; i < n; i++) {
free(names[i]);
}
return 0;
}
void sortNames(char **names, int len) {
qsort(names, len, sizeof(char *), compareStrings);
}
int compareStrings(const void *a, const void *b) {
const char *strA = *(const char **) a;
const char *strB = *(const char **) b;
return strcmp(strA, strB);
}
```
解释一下:
1. 在 `sortNames` 函数中,使用了标准库中的 `qsort` 函数进行排序。这里需要注意,由于 `names` 数组是一个指向指针的指针数组,因此需要传递 `sizeof(char *)` 作为元素大小,而不是 `sizeof(char)`。
2. 定义了一个 `compareStrings` 函数,作为 `qsort` 的比较函数。由于 `qsort` 函数比较的是指针,因此需要使用 `const char **` 类型的指针来接收 `a` 和 `b`,然后再通过 `*` 运算符获取字符串指针,最后使用 `strcmp` 函数进行比较。
3. 在 `main` 函数中,先从用户输入中获取数组长度 `n`,以及 `n` 个字符串,存储到 `names` 数组中。这里使用了动态内存分配,以便在排序时可以直接交换指针。
4. 调用 `sortNames` 函数进行排序。
5. 最后输出排序后的结果,并释放动态分配的内存。
阅读全文