C++编程:将exe的命令行输入解析到对应变量

前言

很多时候我们实现地理模型,为了有较好的运算速度,会选择使用C++进行开发,而且大多数时候是采用Win32控制台项目的方式打包。缺少了可视化界面的参数输入,则采用命令行的方式。但是地理模型的命令行又不像可视化一样——对应参数项输入,而是采用将所有参数整合成一条命令行。

命令行一般表现为: -参数项 内容 -参数项 内容 -参数项 内容…,例如,-stringVector AAA#BBB#CCC -string DDD -double EEE。对于需要输入为列表的参数可以使用指定的分隔符连接起来,这里使用"#"。

以下就这类命令行进行解析,使其转换为地理模型各自对应的参数。

代码实现

void parseStringToVector(const string& str, char c, vector<string>& tokens) {
	unsigned int posL = 0;
	unsigned int posR = 0;
	while (posR < str.length() - 1) {
		posR = str.find_first_of(c, posL);
		string sub = str.substr(posL, posR - posL);
		tokens.push_back(sub);
		posL = posR + 1;
	}
}

void parseArgv(int argc, char* argv[], vector<string> &vector_variable, string &string_variable, double &double_variable) {
	int i = 1;
	while (i < argc) {
		if (strcmp(argv[i], "-stringVector") == 0) {
			i++;
			if (i < argc) {
				parseStringToVector(argv[i], '#', vector_variable);
				i++;
			}
			else { exit(1); }
		}
		else if (strcmp(argv[i], "-string") == 0) {
			i++;
			if (i < argc) {
				string_variable= argv[i];
				i++;
			}
			else { exit(1); }
		}
		else if (strcmp(argv[i], "-double") == 0) {
			i++;
			if (i < argc) {
				sscanf(argv[i], "%lf", &double_variable);
				i++;
			}
			else { exit(1); }
		}
	}
}

int main(int argc, char* argv[]) {
	vector<string> mVector;
	string mString;
	double mDouble;
	// 测试输入:-stringVector AAA#BBB#CCC -string DDD  -double 20.0
	parseArgv(argc, argv, mVector, mString, mDouble);
	// 通过这样的方式,就能够将输入的命令行解析到对应的变量中了
	// mVector -- ["AAA","BBB","CCC"]
	// mString -- "DDD"
	// mDouble -- 20.0
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Oruizn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值