输入姓名/微信名/qq名,用指针代替下标的方法由小到大顺序输出
时间: 2023-07-12 07:37:56 浏览: 47
好的,以下是代码实现:
```
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 50
#define MAX_NUM 10
int main() {
char names[MAX_NUM][MAX_NAME_LEN];
char *p[MAX_NUM];
int i, j, num;
// 输入姓名
printf("请输入%d个姓名/微信名/qq名:\n", MAX_NUM);
for (i = 0; i < MAX_NUM; i++) {
printf("第%d个:", i + 1);
scanf("%s", names[i]);
p[i] = names[i];
}
num = i;
// 按字典序排序
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (strcmp(p[i], p[j]) > 0) {
char *temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
// 输出排序结果
printf("按字典序排序后的结果为:\n");
for (i = 0; i < num; i++) {
printf("%s\n", p[i]);
}
return 0;
}
```
解释一下代码:
首先定义了一个二维字符数组 `names`,用来存储输入的姓名;另外定义了一个字符指针数组 `p`,用来存储 `names` 中每个字符串的地址。
然后通过循环依次输入 `names` 中的每个字符串,并将其地址存储到 `p` 中。
接下来使用冒泡排序的方法,按字典序排序 `p` 中的字符串。
最后循环输出 `p` 中排好序的字符串。
需要注意的是,在输入字符串时使用了 `%s` 格式化字符,这是因为字符串本身就是一个指向字符数组的指针,所以不需要使用取地址符 `&`。