以下の内容はhttps://tips.hecomi.com/entry/20110119/1295424875より取得しました。


コマンドライン引数をstd::mapに格納

バッチファイルからコマンドライン引数をプログラムに渡して,データを大量に得たい!って状況がある際に,コマンドライン引数をいちいち展開するのは面倒です.argv[1] は a に渡して,argv[2] は b に渡して…なんてやってたら,渡したいパラメータが増えたり減ったりした際に,うがー!!ってなりますね.そこで次のように std::map に格納してしまえば簡単に取り出すことができます.

#include <iostream>
#include <cstdio>
#include <string>
#include <map>

using namespace std;

int main(int argc, char* argv[]) {
	map<string, double> arg;
	for (int i = 1; i < argc; ++i) {
		char name[64], val[64];
		sscanf(argv[i], " %[^=]=%s", name, val);
		arg.insert( make_pair( name, atof(val) ) );
	}
	cout << arg["hoge"] << endl;
	cout << arg["fuga"] << endl;
	cout << arg["piyo"] << endl;
	return 0;
}
> ./a hoge=2.0 fuga=10000 piyo=test
> 2
> 10000
> 0

今回は double にしてしまいましたが,取り敢えず std::string に格納しておいて使用するときに所望のものへキャストとしても良いかもしれませんね.

#include <iostream>
#include <cstdio>
#include <string>
#include <map>

using namespace std;

int main(int argc, char* argv[]) {
	map<string, string> arg;
	for (int i = 1; i < argc; ++i) {
		char name[64], val[64];
		sscanf(argv[i], " %[^=]=%s", name, val);
		arg.insert( make_pair( name, val ) );
	}
	cout << atof(arg["hoge"].c_str()) << endl;
	cout << atoi(arg["fuga"].c_str()) << endl;
	cout << arg["piyo"] << endl;
	return 0;
}
> ./a hoge=2.0 fuga=10000 piyo=test
> 2
> 10000
> test



以上の内容はhttps://tips.hecomi.com/entry/20110119/1295424875より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14