利用命令参数argc和argv编写冒泡排序法(从小到大)。(C/C++)【Windows VS2015版 和 Linux版】

         该想法来源于老师布置的一个作业,让在Linux环境下写一个冒泡排序,当时正好讲了命令行参数,于是拿命令行参数写了一个。

        在Windows环境下,大多数童鞋们,估计平时不很接触命令行参数,int argc, char* argv[]    这两个变量,argc表示你在执行该程序时在命令行输入的参数。我用的IDE是VS2015,首先我们要用上命令行参数,就得模拟一个命令行输入,在此以VS2015为例。【调试->冒泡排序法属性->调试->命令参数】如下图:

第一步:点击调试。

第二步:最后一项XXX属性。

第三步:点击调试。

第四步:修改命令参数,我这里写了18个命令参数,这个大家可以根据自己的需求写。

        然后我们的设置就配置好了。由于命令参数都是字符串类型,所以我们还需要对将字符串类型的数字转为int类型,可以这么看,二维的char类型数组就是一维的字符串(即string)。我们将命令参数分别导入translate(char*temp)函数中进行字符翻译,由于我们输入的数字可能大于10,用了指针的方法,一位一位的读取该位字符表示的数字,最后进行拼凑和保存。

long int translate(char*temp)
{
	long int sum = 0;
	int t = 0;
	while (temp[t])
	{
		sum = sum * 10 + (temp[t] - 48);
		t++;
	}
	return sum;
}

       命令参数argc表示输入参数个数,如果不定义,则只有一个参数,也就是argc=1,此时argv表示的是执行的程序路径和名称。如果输入多个,则argc=输入参数个数+1,此时argv[0] 表示执行程序的路径和名称,arg[1],arg[2].....等剩下的就是按你的顺序输入的字符串参数。然后我们将乱序的字符或者字符串进行翻译保存并进行最后的比较。

void sort(int my_argc, char*my_argv[])
{
	int i, j;
	char temp;
	long int Result_Of_translate[18];
	for (int i = 0; i < my_argc - 1; i++)
	{
		Result_Of_translate[i] = translate(my_argv[i + 1]);
		printf("the translation of the %d number is: %ld \r\n", i + 1, Result_Of_translate[i]);
	}
	for (j = 0; j<my_argc - 1 - 1; j++)
		for (i = 0; i<my_argc - 1 - 1 - j; i++)
			if (Result_Of_translate[i]>Result_Of_translate[i + 1])
			{
				temp = Result_Of_translate[i];
				Result_Of_translate[i] = Result_Of_translate[i + 1];
				Result_Of_translate[i + 1] = temp;
			}
	printf("the final result of sort is: \r\n");
	for (i = 0; i<my_argc - 1; i++)
		printf(" %ld  ", Result_Of_translate[i]);
	printf(" \r\n");
}

 

       上边代码中long int Result_Of_translate[18]是一个静态数组,也可以写成一个动态的数组,动态的更加完美,想写动态数组的可以百度一下怎么写动态数组(链接附上)。

但是在Linux中有些不同,我用的Linux版本是 乌班图16.04版本,可以直接写成

long int Result_Of_translate[my_argc]//数组[]直接传入argc参数

这么写的好处是在Linux系统中运行的时候不限制输入的参数个数,可以自动识别出来。

我是这么写的,最后没有报错。

最后,贴上完整的代码:(Windows版)(我这里有预编译,不喜欢的朋友可以去掉)

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
long int translate(char*temp);
void sort(int my_argc, char*my_argv[]);
int main(int argc, char* argv[])
{
	sort(argc, argv);
	system("pause");
	return 0;
}
long int translate(char*temp)
{
	long int sum = 0;
	int t = 0;
	while (temp[t])
	{
		sum = sum * 10 + (temp[t] - 48);
		t++;
	}
	return sum;
}
void sort(int my_argc, char*my_argv[])
{
	int i, j;
	char temp;
	long int Result_Of_translate[18];
	for (int i = 0; i < my_argc - 1; i++)
	{
		Result_Of_translate[i] = translate(my_argv[i + 1]);
		printf("the translation of the %d number is: %ld \r\n", i + 1, Result_Of_translate[i]);
	}
	for (j = 0; j<my_argc - 1 - 1; j++)
		for (i = 0; i<my_argc - 1 - 1 - j; i++)
			if (Result_Of_translate[i]>Result_Of_translate[i + 1])
			{
				temp = Result_Of_translate[i];
				Result_Of_translate[i] = Result_Of_translate[i + 1];
				Result_Of_translate[i + 1] = temp;
			}
	printf("the final result of sort is: \r\n");
	for (i = 0; i<my_argc - 1; i++)
		printf(" %ld  ", Result_Of_translate[i]);
	printf(" \r\n");
}

我们在Windows下的运行结果如下:

同时,也附上Linux版本的代码:(可以根据输入参数个数的不同自动识别输入的个数进行排序)

#include <stdio.h>
long int translate(char*temp);
void sort(int argc,char*argv[]);
int main(int argc, char* argv[])
{
	sort( argc, argv);
	return 0;
}
long int translate(char*temp)
{
	long int sum = 0;
	int t = 0;
	while (temp[t])
	{
		sum = sum * 10 + (temp[t] - 48);
		t++;
	}
	return sum;
}
void sort(int argc, char*argv[]) 
{
	int i, j;
	char temp;
	long int Result_Of_translate[argc-1];
	for (int i = 0; i < argc-1; i++)
	{
	Result_Of_translate[i] = translate(argv[i + 1]);
	printf("the result of the %d number's translating is: %ld \r\n", i + 1, Result_Of_translate[i]);
	}
	for (j = 0; j<argc - 1 - 1; j++)
		for (i = 0; i<argc - 1 - 1 - j; i++)
			if (Result_Of_translate[i]>Result_Of_translate[i + 1])
			{
				temp = Result_Of_translate[i];
				Result_Of_translate[i] = Result_Of_translate[i + 1];
				Result_Of_translate[i + 1] = temp;
			}
	printf("the final result of sort is: \r\n");
	for (i = 0; i<argc - 1; i++)
		printf(" %ld  ", Result_Of_translate[i]);
	printf(" \r\n");
}

我们将它进行保存,编译和执行:

编译运行:(15个数字)

我们换10个数字试试:

以上就是在Windows环境下 和在Linux环境下的命令参数的冒泡排序法了。那个命令参数确实是个好东西,写之不易,希望对大家有帮助,谢谢大家观看啦。

参考:https://www.cnblogs.com/yanglai/p/6927151.html(关于命令参数)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值