输入五个字符串,按从小到大的顺序输出(要求运用指针)
定义一个五行的二维数组用于存放五个字符串,后定义一个数组指针,用循环使指针指向每一行的字符串,如图。用fun函数实现5个字符串的排序。用sor函数按指针数组顺序输出。
fun函数的实现:与冒泡排序相似,两两比较将大的“沉”下面,小的“浮”上面。5个字符串只需要比较4次,外循环表示前一个字符串,内循环表示后一个字符串,用strcmp对两个字符串经行比较,如果前一个字符串大,就交换指针p[]指向的地址。
最后用sor函数按指针数组的顺序输出p[ ]储存的地址指向的字符串。
注意 字符串的交换 和 字符的交换 的区分:
#include <stdio.h>
void change(int* pt1, int* pt2) //传入地址
{
int t;
t = *pt1;
*pt1 = *pt2;
*pt2 = t;
} //交换指向的值而非地址
void main()
{
int* p, * p2, a=34, b=67;
p = &a, p2 = &b;
change(p, p2);
printf("%d %d", a, b);
}
#include <stdio.h>
#include <string.h>
void fun(char* p[], int n)
{
int i, j;
char* temp;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(p[i], p[j]) > 0) //交换地址
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
void sor(char* p[], int n)
{
for (int i = 0; i < n; i++)
printf("%s\n", p[i]); //输出p[i]储存的地址指向的字符串
}
int main()
{
char s[5][20];
char* p[5];
int i,n=5;
printf("请输入5个字符串:\n");
for (i = 0; i < 5; i++)
{
gets(s[i]);
p[i] = s[i]; //指向各行
}
fun(p, n); //排序
printf("排列好的顺序为:\n");
sor(p, n); //输出
return 0;
}
//个人愚见,有问题请指出,感谢!