【发布时间】:2014-05-06 21:55:04
【问题描述】:
我有一个来自命令行的字符串:
–m –d Tue –t 4 20 –u userid
我通过这个将它保存到一个字符串中:
string command;
for(int i=1; i<argc;i++){
string tmp = argv[i];
command += " "+ tmp + " ";
}
现在我想操作这个字符串来查找是否存在 -u 以及是否存在 -u 我想查看下一个值是否以 - 开头或者是一个名称。 (只能是 -u 或 -u 和一个用户名。在这个例子中是一个用户名)
if(command.find("-u",0)){
std::size_t found = command.find_first_of("-u");
cout<<found<<endl;
}
输出是 14,这不是正确的位置。我的工作是查找是否有 -u 以及 -u 之后是否是用户名或其他任何以 - 开头的命令。我很欣赏任何想法或有效的代码。
编辑:我必须在另一台服务器上运行此代码,我不能使用任何库而不是内置 g++ 库。
【问题讨论】:
-
为此使用 getopt_long。这是一个示例:gnu.org/software/libc/manual/html_node/…
-
为什么不使用专用的命令行解析库,即cpp-optparse?
-
说真的,您应该考虑获取已经处理此问题的代码,例如 boost::program_options。 boost.org/doc/libs/1_55_0/doc/html/program_options.html
-
@Bernard:您让 cmets “获取已经执行此操作的库或代码”的原因是因为您真的不想让自己参与命令行解析如果你不必做生意。可能会出现一些极端情况,您的自制代码将无法考虑甚至无法正确处理。