解析 C 语言中的命令行参数
在编程领域,解析命令行参数通常会带来挑战,尤其是在处理复杂输入时模式。考虑一个接受以下格式参数的程序:
prog [-abc] [input [output]]
问题:
我们如何使用内置函数有效地解析 C 中的此类命令行参数函数或自定义代码?
Boost 和GNU:
提供的使用 boost::program_options 和 GNU getopt 的建议是可靠的选项。这些库提供了强大的功能来处理各种命令行参数场景。
标准库方法:
但是,对于更简单的情况,std::find 函数提供了一种简单的方法来解析参数。这种方法允许您搜索特定标志或检索 -f 参数后的文件名。
#include <algorithm> char* getCmdOption(char ** begin, char ** end, const std::string & option) { char ** itr = std::find(begin, end, option); if (itr != end && ++itr != end) { return *itr; } return 0; }
封装代码:
为了增强代码的可读性和可维护性,您可以将解析逻辑封装在专用的class.
class InputParser{ public: InputParser (int &argc, char **argv){ for (int i=1; i < argc; ++i) this->tokens.push_back(std::string(argv[i])); } const std::string& getCmdOption(const std::string &option) const{ std::vector<std::string>::const_iterator itr; itr = std::find(this->tokens.begin(), this->tokens.end(), option); if (itr != this->tokens.end() && ++itr != this->tokens.end()){ return *itr; } static const std::string empty_string(""); return empty_string; } bool cmdOptionExists(const std::string &option) const{ return std::find(this->tokens.begin(), this->tokens.end(), option) != this->tokens.end(); } private: std::vector <std::string> tokens; };
结论:
这些方法提供了解析 C 中命令行参数的有效方法,适合简单和更复杂的场景。选择最适合您对代码简单性、灵活性和性能的特定要求的方法。
以上是如何有效地解析 C 中的命令行参数?的详细内容。更多信息请关注PHP中文网其他相关文章!