C++ 将argv保存到向量或字符串

C++ 将argv保存到向量或字符串,c++,argv,C++,Argv,我需要将所有参数保存到向量或类似的东西。我不是一个程序员,所以我不知道怎么做,但这是我到目前为止得到的。我只想调用一个函数系统来传递后面的所有参数 #include "stdafx.h" #include "iostream" #include "vector" #include <string> using namespace std; int main ( int argc, char *argv[] ) { for (int i=1; i<argc; i+

我需要将所有参数保存到向量或类似的东西。我不是一个程序员,所以我不知道怎么做,但这是我到目前为止得到的。我只想调用一个函数系统来传递后面的所有参数

#include "stdafx.h"
#include "iostream"
#include "vector"
#include <string>
using namespace std;

int main ( int argc, char *argv[] )
{
       for (int i=1; i<argc; i++)
       {
           if(strcmp(argv[i], "/all /renew") == 0)
           {
                 system("\"\"c:\\program files\\internet explorer\\iexplore.exe\" \"www.stackoverflow.com\"\"");
           }
           else
              system("c:\\windows\\system32\\ipconfig.exe"+**All Argv**);
       }

       return 0;
}
#包括“stdafx.h”
#包括“iostream”
#包括“向量”
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
对于(int i=1;i
我需要把所有的参数保存到一个向量之类的东西

您可以使用向量的范围构造函数并传递适当的迭代器:

std::vector<std::string> arguments(argv + 1, argv + argc);
std::向量参数(argv+1,argv+argc);

无法100%确定这是否是您所要求的。如果不是,请澄清。

若要生成包含所有连接参数的字符串,然后根据这些参数运行命令,可以使用以下方法:

#include <string>
using namespace std;
string concatenate ( int argc, char* argv[] )
{
    if (argc < 1) {
        return "";
    }
    string result(argv[0]);
    for (int i=1; i < argc; ++i) {
        result += " ";
        result += argv[i];
    }
    return result;
}
int main ( int argc, char* argv[] )
{
    const string arguments = concatenate(argc-1, argv+1);
    if (arguments == "/all /renew") {
        const string program = "c:\\windows\\system32\\ipconfig.exe";
        const string command = program + " " + arguments;
        system(command.c_str());
    } else {
        system("\"\"c:\\program files\\internet explorer\\iexplore.exe\" \"www.stackoverflow.com\"\"");
    }
}
#包括
使用名称空间std;
字符串连接(int-argc,char*argv[])
{
如果(argc<1){
返回“”;
}
字符串结果(argv[0]);
对于(int i=1;i
注意:
argv
包含由空格分隔的标记,因此我怀疑它是否会同时包含
/all
/renew
@rubenvb:为什么盲目遵守一个原则,要求您无缘无故地编写更多代码?@Bo,@André,@Rob:你们都误解了我。我有一个类的构造函数填充了一个vector通过for循环,而我本可以通过正确的
vector
构造函数调用来完成同样的事情。我不想自己构建vector,我不会盲目地遵守该原则;我的代码没有看到需要执行其他操作,1)如果您没有在构造函数代码块中捕捉到这些异常,它可以防止意外抛出异常。2)这是一个很好的建议,但由于前面提到的误解,这与此无关。我为不够清楚表示歉意。@rebenvb:从构造函数中抛出异常是一项功能!您为什么想要一个部分构造的对象?@DBJDBJ
argv[0]
通常是可执行文件的名称和路径,在大多数情况下你并不关心它。@JonathanKomar因为
向量
构造函数需要两个迭代器,在这种情况下是字符指针指针。
argc
只是一个
int
,而
argv
argv+argc
char**
s。注意:for如果要实现更好的字符串连接,请改用
stringstream
。@André:一般来说,为了获得更好的性能(并不是说这个特定的用例会让您慢很多…)编辑:修复了连接中的错误,需要空格。@安德烈·卡伦为什么
stringstream
更适合连接?
std::string
直接支持连接;
std::ostringstream
用于格式化输出。@安德烈·卡伦我不确定我是否理解你的意思。连接字符串的自然方式是
+
运算符(或
+=
)。其他任何操作都是模糊处理。