可变长度和位置命令行参数
Variable length and position command line arguments
那么,快速提问:我的任务是编写一个程序,它可以读取文件,做一些奇特的事情,并将重新使用的文本写入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; }
相关文章:
- 从命令行c++发送文本文件名
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 数组长度,为什么从命令行获取时不能使用它?
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 通过 Openssl 命令行加密,通过 c++ 解密
- CMake "--target install"无需"--build"命令行
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 使用 C++ 将命令行参数拆分为参数/向量
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 如何在OMNET++中添加专门的命令行参数?
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 在命令行中创建快捷命令
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- C++命令行实用程序输入文件的位置会更改行为
- 从服务器中不同位置的命令行参数传递的打开文件名
- 可变长度和位置命令行参数