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:从构造函数中抛出异常是一项功能!您为什么想要一个部分构造的对象?@DBJDBJargv[0]
通常是可执行文件的名称和路径,在大多数情况下你并不关心它。@JonathanKomar因为向量
构造函数需要两个迭代器,在这种情况下是字符指针指针。argc
只是一个int
,而argv
和argv+argc
是char**
s。注意:for如果要实现更好的字符串连接,请改用stringstream
。@André:一般来说,为了获得更好的性能(并不是说这个特定的用例会让您慢很多…)编辑:修复了连接中的错误,需要空格。@安德烈·卡伦为什么stringstream
更适合连接?std::string
直接支持连接;std::ostringstream
用于格式化输出。@安德烈·卡伦我不确定我是否理解你的意思。连接字符串的自然方式是+
运算符(或+=
)。其他任何操作都是模糊处理。