用函数void sort(char *name[],int n)实现他们的字符串字典顺序
编写一个书名排序程序,在主函数中输入n(n<=10)个书名存入一个二维数组,
用函数void sort(char *name[],int n)实现他们的字典顺序,
并用函数print(char *name[],int n)输出n个书名。
输入
第一行为整数n,后面n行是n个字符串表示的书名。
输出
排序后的书名,每行一个。
样例输入
5
Follow me
BASIC
Great Wall
FORTRAN
Computer
样例输出
BASIC
Computer
FORTRAN
Follow me
Great Wall
#include <stdio.h> #include <string.h> /* 二维数组传参的成功依赖于两部分:一是形参支持某种二维数组实参;二是实参的实质还要和形参相匹配. */ //void sort_string(char **string); void sort_string(char **string,int n)//作为形参:char **string 等价于 char *string[] { /* 冒泡版 */ int i=0,j=0; char buf[200]; char *buf_p = string[0]; /* '*'切换到列指针(第i行的第零列地址):(*(string + i)) (*(string + i) + j)第i行第j列的地址; *(*(string + i) + j)第i行第j列的元素. */ /* 计数(遍历)字符串的数目n */ /* 如果有必要对整个字符串进行比较,当然是用strcmp()函数,但 如果比较第一个字符足以/或可以转化为比较其他属性(长度strlen()函数),则不必 */ //for(n = 0;len != 0;n++);/* 原本打算再内部计算n(字符串个数) */ /* 冒泡排序算法 */ for(i = 0;i<n-1;i++) { //考虑列一个i_j排序区间部分 的枚举表格。https://img04.sogoucdn.com/app/a/100520146/79a03c31fdd4ef90a6329999fb8a9e99 for(j=0;j<=n-2-i;j++) { /* 如果前者大于后者.交换位置使得最大者尽量靠后 [min,max)型升序排列;随趟次增加,右界限往前缩小. 调转一成<号,就成了[max,min)型降序排列.*/ if(strcmp(string[j],string[j+1]) > 0) //需要注意的是下标再这个模块了的j+1而不可出现相反的j-1,然而这容易不自主的写错 { /* 调用strcpy(),可以使得字符串的排序和赋值项整数那样利索. 但不够高效. */ //strcpy(buf,string[j]); buf_p = string[j];//这是个指针变量作为右值,这时候,就将指针变量所保存的变量地址赋值给作为左值的指针 //避免:warning: ISO C++ forbids converting a string constant to 'char*' //strcpy(string[j],string[j+1]); string[j] = string[j+1]; //strcpy(string[j+1],buf); string[j+1] = buf_p; } } } } int main() { //编一个字符串数组,并初始化 //char *string[] = {"ad.txt","a1.txt","ac.txt","a5.txt"}; /* string是指针数组名(同时指向第一个元素的地址(这里也就是第一个指针变量的地址,所以指针数组名也是给二级指针(同:&string[0]))); string[i]是该数组(指针数组的第i个元素,每个元素都是指针变量(也是地址))(可以从普通数组的角度理解); &string[i]则是第i个元素的地址,相当于取指针变量的地址,即二级指针(地址) */ //sort_string((char**)string);/* string:char (*)[20] 指向含 (有20个char类型的) 数组(的)指针变量*/ //char*p[20] = string; int i=0,j=0; int n = 0; scanf("%d",&n); getchar();//新get的技能处理这第一个回车 char buf[200]; char read[20][20]; char *string[20]; /* 挂钩: */ for(int i = 0;i < n;i++) { // scanf("%s",read[i]);//无法处理字符串的空格 //read[i](二维数组,列指针) gets(read[i]); string[i] = read[i]; } /* 计数(遍历)字符串的数目n */ /* 如果有必要对整个字符串进行比较,当然是用strcmp()函数,但 如果比较第一个字符足以/或可以转化为比较其他属性(长度strlen()函数),则不必 */ /* 处理的是无空洞字符串数组 */ sort_string(string,n); for(int i = 0;i<n;) { printf("%s\n",string[i++]); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了