编写排序程序,排序的元素在命令行中输入,完成排序后输出
2023-09-14 08:56:53 时间
问题分析
这个问题的解决方法,不在于怎么排序,或者说使用哪种方法来排序
重点是:
1、因为平时练习的时候,都是将数组的元素写死的,或者使用scanf从标准输入中获取输入的数据,或者从文件中读取的,那么,怎么从命令行接收数据,并且对数据进行排序呢?
2、命令行接收到的数据,是什么格式,虽然输入的是数字,但是会被当做字符串,那么怎么做转换?
解决方案
1、要想在命令行中传递参数给程序,可以在主函数定义两个参数,一个argc,一个argv,名称随意,在程序中,通过访问这两个参数来访问传入的参数。其中argc表示在命令行中启动程序时,参数的个数(包括程序名);argv为一个数组,表示的命令行参数的每一个参数值(统一被当成字符串,可以手动转换为其他格式)。比如sort 1 3 2,对1 3 2排序,其中argc为4,argv[0]为"sort"(也就是程序名),argv[1]为"1",argv[2]为"3",argv[3]为"2",注意这里都是字符串。
2、格式转换可以使用atoi()来讲字符串转换为整数,之后可以使用(int)x来进行强制类型转化
代码
#include <stdio.h> // 使用简单的冒泡排序为例 void BubbleSort(int a[], int n) { int i, j; for (i = 0; i < n; i++) { for (j = i+1; j < n; j++) { if (a[i] > a[j]) { int t = a[i]; a[i] = a[j]; a[j] = t; } } } } // 注意这里main函数的两个参数,一个是int类型的参数,另外一个是char **类型 int main(int argc, char * argv[]) { // 数组长度为参数个数减1,因为要除去程序名本身 int length = argc - 1; int arr[length]; int i; // 从第2个参数开始转换为数组 for (i = 1; i < argc; i++) { arr[i-1] = (int)atoi(argv[i]); } BubbleSort(arr, length); for (i = 0; i < length; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }
运行实例
[root@ubuntu ~]$ # compile source code [root@ubuntu ~]$ gcc -o sort sort.c [root@ubuntu ~]$ [root@ubuntu ~]$ ./sort 9 7 3 5 1 6 8 4 0 9 7 0 1 3 4 5 6 7 7 8 9 9 [root@ubuntu ~]$