字符串排序(基于指针数组)

/* 排序:对指针的指向关系进行重构
字符串排序:
请编写C程序,输入5个不同的且为字符格式的学生编号,将其先由大到小排序,
再将最大的学生编号和最小的学生编号互换位置,然后输出此时5位学生的编号。
输入
输入5位学生的编号(只含数字字符、英文字母或空格)。
输出
输出按题意要求排序后的5位学生的编号。
样例输入
good1
tiger100
horse20n
mouse 022
21century
样例输出
21century
mouse 022
horse20n
good1
tiger100
提示
用gets()函数输入字符串。
*/
#include <stdio.h>
#include <string.h>
void swap(char **,char **);
int main(){
char *p[5];//开一个指针数组.(同时也要开一个二维数组来与指针数组绑定;(否则光有指针数组只是空壳(只是一些没有空地的地址),存不了东西(字符串)
char str[5][50];//开一个字符数组(5行50列规格),与指针数组p对应绑定
int i,j;
// printf("test_1\n");
for (i = 0;i<5;i++)
{
gets(str[i]);//向字符数组里填东西:(二维数组中的第i行的字符串),然后与p[i]绑定.
p[i] = str[i];//让指针数组里的指针p[i]指向字符串的首地址str[i];
//printf("___________%s",p[i]);
}
//使得*p[]指针数组中最后的那个指针所指的那个元素被迭代为最小
//类似于冒泡
//if(*p[j] > *p[j-1] )//p[j-1]可以触及p[i];(虽然j无法于i相等)
//如果后指针所指的元素大于前指针所指的元素,那么交换这对相邻指针的指向关系
//最终,最大的那个元素将由最前面的那个指针所指向.那么隐去这一对指向关系后(p[0]----str_var(max))
//由j>=i+1来实现.(可以感受到冒泡思维,再各趟的"排序中" 遇到最大值之前,所作的所有swap操作都是没什么意义的)
for(i=0;i<5;i ++ )//外层循环变量除了可以用来控制循环的次数,还可以参与内部循环的条件控制.(双控变量)
{//冒泡
for(j=4;j>=i+1;j--)//这里是从后往前比;内层给的是RHS范围RHS∈[i+1,n-1]
{//!!比较字符串位置索引的前后j>i;j只需要到前推到i+1处即可,i处的元素由此时的j-1,来访问到,使之参与比较.
//if(*p[j]>*p[j-1])比较的是字符串首字符
// if(p[j] > p[j-1] )//比较的是地址(int(十六进制)).而非地址所指的字符串本身(char).
//实际上就是*pointer.(这里的值是各个字符串)
//字符串的比较是计算机内部逐字符的比较,
//用户把他们简化的当作两个字符的比较的用法一样;
//这里再做一个额外的小区分:*p[j+1](对于str的行指针,指上(前)一个字符串首地址)和*p[j]+1(指这一字符串中的后面(下)一个字符);
if(strcmp(p[j],p[j-1])>0)
{
//直接交换,而不设置最值角标中间变量,冒泡
swap(&p[j],&p[j-1]);//pointer.
//swap(*p[j],*p[j-1]);//*p[j]是字符串本身:即char 类型的变量.
}
}
}
printf("\n");
printf("%s\n",p[4]);
for(i = 1;i < 4;i++)
{
printf("%s\n",p[i]);
}
printf("%s\n",p[0]);
}
void swap(char **a,char **b)//交换指向关系而已
{
char *t;
t = *a;//
*a = *b;
*b = t;
}
posted @   xuchaoxin1375  阅读(32)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2023-03-30 ML@sklearn@ML流程Part2.1@载入数据集@模型评估@sklearn交叉验证api
2023-03-30 ML@sklearn@ML流程@part1
2021-03-30 python@迭代器@生成器@可迭代对象@每次从可迭代对象中取处k个元素
2021-03-30 windows10@安装英语语言包异常_挂起中@设置搜索框的异常(总是搜不出任何结果)问题
点击右上角即可分享
微信分享提示