C++ 可变长度和位置命令行参数
那么,快速提问: 我的任务是制作一个程序,读入一个文件,做一些奇特的事情,然后用重新指定的文本将其写入一个html文件,所有这些都是简单的东西。 此外,程序必须能够接受多达四个命令行参数(但最少两个)。当然是可执行文件,它正在读取的文件,它将要读取到的文件名,最后是一个“-r”参数,用于获取有关文件的更多信息(段落的数量等) 因此,我的问题如下: “-r”参数可以在参数中的任何位置(当然,只要它位于argv[0]之后),也可以完全不存在(输出文件名也是如此) 这仍然很简单,写一堆if,甚至一两个switch都有点乏味,但我忍不住认为可能有更简单的方法来实现这一点,而不是有过多的if语句C++ 可变长度和位置命令行参数,c++,position,command-line-arguments,C++,Position,Command Line Arguments,那么,快速提问: 我的任务是制作一个程序,读入一个文件,做一些奇特的事情,然后用重新指定的文本将其写入一个html文件,所有这些都是简单的东西。 此外,程序必须能够接受多达四个命令行参数(但最少两个)。当然是可执行文件,它正在读取的文件,它将要读取到的文件名,最后是一个“-r”参数,用于获取有关文件的更多信息(段落的数量等) 因此,我的问题如下: “-r”参数可以在参数中的任何位置(当然,只要它位于argv[0]之后),也可以完全不存在(输出文件名也是如此) 这仍然很简单,写一堆if,甚至一两个
任何帮助都将不胜感激。(考虑到我没有问题,我还假设您不需要任何代码。)这里大致介绍了在没有库的情况下如何实现这一点: GCC 4.8.2:g++-Wall-Wextra-std=c++0x main.cpp
#include <iostream>
#include <string>
int main(int argc, char* argv[]) {
char* input = nullptr;
char* output = nullptr;
char* r_arg = nullptr;
--argc; ++argv; // Skip the program name.
const char* def_in = "default in";
const char* def_out = "default out";
const char* def_r = "default r";
while (0 < argc) {
if (std::string(argv[0]) == "-r") {
// This code requires a space after the "-r", which is unusual.
++argv;
--argc;
r_arg = argv[0]; }
else if (input == nullptr) {
input = argv[0]; }
else if (output == nullptr) {
output = argv[0]; }
else {
std::cerr << "error: unexpected arg '" << argv[0] << "'\n"; }
++argv;
--argc; }
if (input == nullptr) {
input = const_cast<char*>(def_in); }
if (output == nullptr) {
output = const_cast<char*>(def_out); }
if (r_arg == nullptr) {
r_arg = const_cast<char*>(def_r); }
std::cout << "input: " << input << "\n"
<< "output: " << output << "\n"
<< "r arg: " << r_arg << "\n";
return 0; }
#包括
#包括
int main(int argc,char*argv[]){
char*input=nullptr;
char*output=nullptr;
char*r_arg=nullptr;
--argc;++argv;//跳过程序名。
const char*def_in=“默认值in”;
const char*def_out=“默认输出”;
const char*def_r=“默认r”;
而(0 std::cerr如果您的问题周围有相关的代码,那就太好了。请编辑您的问题,将其包括在内。互联网上到处都有命令行解析选项。找到一个您可以使用的命令行解析选项。@AdamZuckerman问题是,我没有问题,只是一个简单的问题。Boostprogram options
可能是一个o这里是verkill。但是你可以试试。Esier选项是getopts
@名为谢谢,我已经研究了Boost程序选项,但没有研究getopts,所以我将对此进行研究