字符串排序(基于指针数组)
/* 排序:对指针的指向关系进行重构 字符串排序: 请编写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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享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@安装英语语言包异常_挂起中@设置搜索框的异常(总是搜不出任何结果)问题