1.字符串排序(指针实现)
用二维数组来记下每一组的字符串
用一个指针数组来指向每个字符串
再从1~n用cmp实现字典序排序
重点:cmp函数两个参数为指针,利用strcmp函数实现字典序比较排序,由于puts函数本身就是利用首地址进行输出所以只需要给它原指针即可
老师代码如下(附注释):
1 //本程序是将n个字符串按字典序从大到小排序 2 3 #include<bits/stdc++.h> 4 #define For(i,l,r) for(int i=(l);i<=(r);i++) 5 using namespace std; 6 char str[100][1000]; 7 char *ptr[100]; 8 //定义一个比较两个字符指针 9 bool cmp(char str1[],char *str2){ //str1和str2 是两个指向char类型的指针变量 10 return strcmp(str1,str2)<0; //相当于if (strcmp(a,b)<0) return true ;else return false; 11 //strcmp函数是一个<cstring>里的字符串比较函数,当字典序下分别为a>b,a==b,a<b,返回值为正数、0、负数 12 } 13 int main(){ 14 int n; 15 scanf("%d ",&n); 16 // %d 是强制换行,保证第一个字符串的输入从下一行开始。由于scanf需要对传入的n的值进行修改,所以传入n的地址 17 For(i,1,n){ //宏定义取代了for(int i=1,i<=n;i++) 18 gets(str[i]); 19 ptr[i]=str[i];//字符指针ptr[i] 存 str[i]字符串的首地址 20 } 21 sort(ptr+1,ptr+1+n,cmp); //对指针进行排序,两个指针的大小依据cmp返回的结果 22 For(i,1,n) 23 puts(ptr[i]); //按序扫描一遍指针,输出指针指向的字符串 24 return 0; 25 }
2.约瑟夫问题(数组实现链表)