所以,快速提问: 我的任务是创建一个程序来读取文件,做一些奇特的事情,并写出一个带有重新定位文本的html文件,所有简单的东西。 此外,程序必须能够接受最多四个命令行参数(但最少两个)。当然是可执行文件,它正在读取的文件,它将读出的文件名,最后是一个“-r”参数,以获取有关该文件的更多信息(段落数量等)。
所以我的问题如下: “-r”参数可以在参数中的任何位置(只要它在argv [0]之后),或者它可以完全不存在(如输出文件名一样)。
这仍然很简单,写一堆if或甚至一两个开关有点乏味,但我不禁想到可能有一种更简单的方法来实现这一点,而不是过多的如果陈述。
非常感谢任何帮助。 (我还假设您不需要任何代码,因为我没有确切的问题。)
答案 0 :(得分:0)
以下是大家如何在没有图书馆的情况下做到这一点:
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; }