栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

西安交大计算机考研软件工程编程题库(三十一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

西安交大计算机考研软件工程编程题库(三十一)

西安交大计算机考研软件工程编程题库(三十一)
  • 鄙人今年备考,主要目的在于记录学习历程,望道友们勿喷~
  • 希望能做到每日一题~
  • 开始炼丹~

上篇链接:西安交大计算机考研软件工程编程题库(三十)
下篇链接:西安交大计算机考研软件工程编程题库(三十二)


文章目录
  • 西安交大计算机考研软件工程编程题库(三十一)
  • 一、题目
  • 二、解答
    • 1.分析
    • 2.代码实现
    • 3.输出结果
  • 总结


一、题目

用指针数组和指向指针的指针的方法实现对10个字符串的排序,并将结果输出。

二、解答 1.分析

分析一波,本题要求是给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实现,其他语言的道友见谅~。

2.代码实现

代码如下:

#include
#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;
}
3.输出结果


总结

本题的还写了一个非指针数组的实现方式,仅供道友参考~

#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:
拖更的问题主要在于博文的文字部分,题目的代码都写完了,鄙人尽力去更~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号