c语言输入姓名/微信名/QQ名,用指针代替下标的方法由小到大顺序输出
时间: 2023-12-17 13:05:30 浏览: 74
好的,以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
void sortNames(char **names, int len);
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]);
}
return 0;
}
void sortNames(char **names, int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (strcmp(names[i], names[j]) > 0) {
char *temp = names[i];
names[i] = names[j];
names[j] = temp;
}
}
}
}
```
解释一下:
1. 定义了一个 `sortNames` 函数,用来排序姓名/微信名/QQ名数组。
2. 在 `main` 函数中,先从用户输入中获取数组长度 `n`,以及 `n` 个字符串,存储到 `names` 数组中。这里使用了动态内存分配,以便在排序时可以直接交换指针。
3. 调用 `sortNames` 函数进行排序。
4. 最后输出排序后的结果。
注意事项:
1. 在排序时需要使用 `strcmp` 函数进行字符串比较,而不能直接使用 `<` 或 `>` 运算符。
2. 在动态内存分配时,每个字符串占用的空间不能超过 `MAX_LEN`,否则可能会发生内存溢出等问题。
3. 在程序结束时,需要释放动态分配的内存,避免内存泄漏。
阅读全文