使用C++; 我有一个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++; 我有一个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++,command-prompt,C++,Command Prompt,但是,由于将此代码插入到更广泛的项目中,我的命令行现在必须如下所示: C:\MyFolder\MyExecutable.exe 401 如何将参数401拆分为一个向量或类似对象,该向量或类似对象在功能上与具有三个输入参数(如4 0 1)相同,以便我的行: int in_arg = argv[i]; …可以重新打印到以下内容: int in_arg = new_vector[i]; 我只与C++对话,所以如果我问基本问题,就道歉。< /P> 谢谢您可以从参数中创建字符串s,只需逐个字符地查看
C:\MyFolder\MyExecutable.exe 401
如何将参数401
拆分为一个向量或类似对象,该向量或类似对象在功能上与具有三个输入参数(如4 0 1
)相同,以便我的行:
int in_arg = argv[i];
…可以重新打印到以下内容:
int in_arg = new_vector[i];
我只与C++对话,所以如果我问基本问题,就道歉。< /P>
谢谢您可以从参数中创建
字符串
s,只需逐个字符地查看它们:
#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*[]
}
#包括
#包括
#包括
int cppmain(std::string程序,std::vector args){
STD::CUT< P>如果您已经知道第一个参数是使用它的简单,将它复制到字符串,然后使用C++给出的迭代选项之一访问它,我使用Fruth类型循环:
#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;
}
#包括
#包括
int main(int argc,字符**argv)
{
如果(argc<2){
std::cout每个参数都可以超过char的大小吗?而且参数也可以是例如40 10 12,如果是这样,下面的解决方案将生成401012->4 0 1 0 1 2,这是6个参数。@Nazim参数401
在程序中显示为一个char*
字符,指向4个char
字符中的第一个:'4',0',1',0'-因此没有溢出的风险。而且,如果只需要一个参数,那么只需要第一个参数。在int In_arg=m[argv[i]];
中,我假设你的意思是int In_arg=m[*argv[i]];
-正确吗?@tedlynmo否。为什么?因为argv[i]
是char*
和*argv[i]
是一个char
m[argv[i]]
如果你能编译它肯定会引起问题(未定义的行为)。你应该使用static\u cast(c-'0')
而不是static\u cast(c-48)
(实际上c-'0'
是你真正需要的,因为它已经是int
)我想这样更简单,我是simpler的超级粉丝。
#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;
}