- 头文件
- 在MFC中使用
- 在控制台程序中使用
头文件
1 2 3 4
| #include <map> #include <regex> #include <string> using namespace std;
|
在MFC中使用
通过__argc
获取参数数量,通过__targv
获取宽字符串,并转为std::string
。
1 2 3 4 5 6 7 8 9 10 11 12 13
| void ParseCommandLine(map<string, string>& cmds) { for (int i = 1; i < __argc; i++) { string para = ws2s(__targv[i]); smatch base_match; if (regex_match(para, base_match, regex("(--|-)([a-z]|[A-Z])*"))) { string key = &*base_match[1].second; cmds[key] = ws2s(__targv[++i]); } } }
|
1 2 3 4 5 6 7 8 9 10 11
| std::string ws2s(const std::wstring& ws) { int len; int slen = (int)ws.length() + 1; len = WideCharToMultiByte(CP_ACP, 0, ws.c_str(), slen, NULL, 0, NULL, NULL); char* buf = new char[len]; WideCharToMultiByte(CP_ACP, 0, ws.c_str(), slen, buf, len, NULL, NULL); std::string r(buf); delete[] buf; return r; }
|
在控制台程序中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void CDlgSpatialRefSysDlg::ParseCommandLine(int argc, char* argv[], map<string, string>& cmds) { for (int i = 1; i < argc; i++) { string para = argv[i]; smatch base_match; if (regex_match(para, base_match, regex("(--|-)([a-z]|[A-Z])*"))) { string key = &*base_match[1].second; cmds[key] = argv[++i]; } } }
int main(int argc, char* argv[]) { map<string, string> params; ParseCommandLine(argc, argv, params); }
|