使用 C++ 将命令行参数拆分为参数/向量

Split command line argument into arguments/a vector using C++

本文关键字:参数 向量 拆分 使用 命令行 C++      更新时间:2023-10-16

我有一个C++项目,该项目以前接收多个命令行参数,其代码如下:

int main(int argc, char *argv[]) {
for (int i = 1; i < 4; i = i + 1) {
// do some stuff with argv[i]
int in_arg = m[argv[i]];
}
return 0
}

使用此代码,示例命令行参数可能是:

C:MyFolderMyExecutable.exe 4 0 1

但是,由于将此代码插入到更广泛的项目中,我的命令行现在必须如下所示:

C:MyFolderMyExecutable.exe 401

如何将参数401拆分为一个向量或类似内容,该向量在功能上与具有三个输入参数(如4 0 1(相同,以便我的行:

int in_arg = argv[i];

。可以重定向到类似以下内容:

int in_arg = new_vector[i];

我只涉足C++,所以如果我问基本问题,请道歉。

谢谢

如果您已经知道第一个参数是使用它的参数,那么它很简单,请将其复制到字符串中,然后使用 C++ 给出的迭代选项之一访问它,我使用的是 foreach 类型循环:

#include <iostream>
#include <vector>
int main(int argc, char** argv)
{    
if(argc < 2){
std::cout << "Not enough arguments";  //<-- args check
return 0;
}
std::string s1;
s1 = argv[1]; //<-- copy argument to a string type to use string iterator
std::vector<int> args_vector;
for (char c : s1) {
args_vector.push_back(c - '0'); // convert char to integer and save it in vector
}
for(int i: args_vector){ // print the args in integer format, 1 by 1
std::cout << i << " ";
}
return 0;
}

你可以从参数中创建string,然后逐个字符地浏览它们:

#include <iostream>
#include <string>
#include <vector>
int cppmain(std::string program, std::vector<std::string> args) {
std::cout << program << " got " << args.size() << " argument(s):n";
for(auto& arg : args) {              // each argument as a string
std::cout << " " << arg << 'n';
for(char ch : arg) {             // each char in the current argument
if(ch < 0) continue;         // skip negative char:s
int in_arg = m[ch];          // assuming it was: int in_arg = m[*argv[i]];
// use in_arg
}
}
return 0;
}
int main(int argc, char* argv[]) {
//
//         string from char*
//                |
//                V
return cppmain(argv[0], {argv + 1, argv + argc});
//                      ^                     ^
//                      |                     |
//                     vector<string> from char*[]
}