- 鄙人今年备考,主要目的在于记录学习历程,望道友们勿喷~
- 希望能做到每日一题~
- 开始炼丹~
上篇链接:西安交大计算机考研软件工程编程题库(三十)
下篇链接:西安交大计算机考研软件工程编程题库(三十二)
文章目录
- 西安交大计算机考研软件工程编程题库(三十一)
- 一、题目
- 二、解答
- 1.分析
- 2.代码实现
- 3.输出结果
- 总结
一、题目
二、解答 1.分析用指针数组和指向指针的指针的方法实现对10个字符串的排序,并将结果输出。
2.代码实现分析一波,本题要求是给10个字符串排序(用指针数组与指向指针的指针的方式实现)。
- 单说实现字符串的排序,在这一题中已经实现了,而本题的难点在于用指针数组与指向指针的指针(二级指针)的方式实现。
- 首先说一下指针数组:指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。例如,int *p[3];,这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]。
- 其次是二级指针,一个指针指向的是另外一个指针,我们就称它为二级指针。例如,int a =100; int *p1 = &a; int **p2 = &p1;,**p2就是二级指针。
- 回到本题,按照题目的要求,指针数组自然用于存放十个字符串,而二级指针的目的在于传参,当然对于排序的算法,还是以鄙人最熟悉的冒泡排序为主。
话不多说,实现一下。
Ps:不出意外鄙人的此系列文章都会用C实现,其他语言的道友见谅~。
代码如下:
#include3.输出结果#include #define MaxSize 100 #define N 11 char **StringSort(char **str){ int i, j; for(i = 1; i < N; i++){ for(j = i+1; j < N; j++){ if(strcmp(str[i], str[j]) > 0){ str[0] = str[i]; str[i] = str[j]; str[j] = str[0]; } } } return str; } int main(){ int i, j; char *str[N]; char temp[N][MaxSize]; printf("请输入%d个字符串:n", N-1); for(i = 1; i < N; i++){ scanf("%s", temp[i]); str[i] = temp[i]; } printf("原始数据为:n"); for(i = 1; i < N; i++){ printf("str%d=%sn", i, str[i]); } StringSort(str); printf("升序排序后结果为:n"); for(i = 1; i < N; i++){ printf("str%d=%sn", i, str[i]); } return 0; }
总结
本题的还写了一个非指针数组的实现方式,仅供道友参考~
#include#define MaxSize 100 #define N 11 //将十个字符串输入到一个字符数组中 typedef struct StringWithIndex{ char str[MaxSize]; }SWI; SWI string[N]; //用于比较两个字符串的大小 int Compare(char *str1, char *str2){ char *p = str1, *q = str2; int flag = 0; //0代表str1大,1代表str2大 while(*p != ' '){ if(*p > *q){ break; } else if(*p < *q){ flag = 1; break; } else{ p++; q++; } } return flag; } //用于排序 void Sort(SWI *string){ int i, j; int temp; //冒泡排序 for(i = 1; i < N; i++){ for(j = i+1; j < N; j++){ temp = Compare(string[i].str, string[j].str); if(temp){ string[0] = string[i]; string[i] = string[j]; string[j] = string[0]; } } } } int main(){ int i; //循环输入 printf("请输入%d个字符串(字符串长度相同):n", N); for(i = 1; i < N; i++){ scanf("%s", string[i].str); } //排序 Sort(string); //输出结果 printf("降序排序后结果为:"); for(i = 1; i < N; i++){ printf("%st", string[i].str); } return 0; }
Ps:
拖更的问题主要在于博文的文字部分,题目的代码都写完了,鄙人尽力去更~



