可变长度和位置命令行参数

Variable length and position command line arguments

本文关键字:位置 命令行 参数      更新时间:2023-10-16

那么,快速提问:我的任务是编写一个程序,它可以读取文件,做一些奇特的事情,并将重新使用的文本写入html文件,所有这些都是简单的事情。此外,程序必须能够接受最多四个命令行参数(但至少两个)。当然,可执行文件,它正在读取的文件,它将读取到的文件名,最后是一个"-r"参数,用于获取文件的更多信息(段落的数量等)。

所以我的问题是:"-r"参数可以出现在参数中的任何位置(当然,只要它出现在argv[0]之后),也可以完全不存在(输出文件名也可以不存在)。

这仍然很简单,写一堆if甚至是一两个开关有点乏味,但我忍不住想,可能有一种更简单的方法来完成这一点,而不是使用过多的if语句。

任何帮助都将非常感激。(我也认为你不需要任何代码考虑到我没有确切的问题。)

在没有库的情况下,大致可以这样做:

GCC 4.8.2: g++ - wall -Wextra化c++ 0 x 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; }