PTA习题8-7 字符串排序 (20 分)-用下qsort,直接变成麻瓜题目!

综述:

        这道题如果硬做的话挺麻烦,要写个冒泡排这几个字符串,我是懒的写了,突然想起来鹏哥讲过的qsort()函数,之前也没用过,所以这次直接用了,没想到一用这么的好用。


题目:

        本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式: 

        输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

     按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例: 

red yellow blue green white

输出样例: 

After sorted:
blue
green
red
white
yellow


思路: 

        思路非常非常简单,共分为三步:

1、输入字符串,这里要稍微说一下二维数组,二维数组可以理解为一种一维的数组,它的每个元素就是一个一维数组,如arr[5][80],可以看作5个元素,每个元素可以存放80个字符,我们知道一个一维数组arr ,如果表示第几个元素可以直接写arr[i],也可以写成 *(arr+i),对二维数组来说首元素地址就是数组名字,若找一行中的一个元素,便可以写成 *(*(arr+i)+j)。

2、排序,使用qsort函数,这个函数共有四个参数,第一个参数是代排数组的首元素地址,第二个参数是待排序数组的元素个数,第三个参数是待排序数组的每个元素的大小,单位是字节,第四个参数是函数指针,指向的函数是比较两个字符串大小的方法。我们这个方法也直接使用库函数strcmp了。

3、打印输出,这个没啥好说的了。

经过这三个步骤,这小题变的嘎嘎简单,一共也就20几行代码完全ojbk。

代码:

#include 
#include 
#include 
int main()
{
	char arr[5][80];
	memset(arr, '\0', sizeof(arr));
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		scanf("%s", arr[i]);
	}
	qsort(arr, 5, sizeof(arr[0]), strcmp);
	printf("After sorted:\n");
	for (i = 0; i < 5; i++)
	{
		fputs(arr[i], stdout);
        printf("\n");
	}
	return 0;
}

总结:

        这个题只要用下qsort就十分简单,但是有一点需要注意,qsort参数挺多,传参不要搞错。


你可能感兴趣的:(PTA刷题)