2011-05-17 122 views

回答

8

不準確,但你可以很容易地接近。

#include <iostream> 
#include <vector> 
#include <string> 

using namespace std; 

typedef vector<string> CommandLineStringArgs; 

int main(int argc, char *argv[]) 
{ 
    CommandLineStringArgs cmdlineStringArgs(&argv[0], &argv[0 + argc]); 

    for (int i = 0; i < cmdlineStringArgs.size(); ++i) 
    { 
     cout << cmdlineStringArgs[i] << endl; 
    } 

    return 0; 
} 

這只是用來標準::矢量重載的構造,需要一個begining /結束迭代器對到命令行參數複製到載體中。它跟從那裏的java差不多。

您也可以使用實用方法構建並反轉該向量來轉換參數,但幾乎沒有意義。還有很多包含對象的包,這些包處理解釋命令行開關等。 ACE,POCO,QT等都配備了這樣的設施。

+0

首先將所有參數拷貝到'std :: vector'中的目的是什麼?同樣的循環可以直接遍歷'argv'。 – sbi 2011-05-17 22:02:28

+0

@sbi - 重點在於它回答了OP的問題。他想要完成的更適合OP。 – Duck 2011-05-17 22:34:51

+1

這是無稽之談。索引到'argv'也會回答sean的問題。他沒有問過如何將這些論據轉化爲矢量。你剛剛向他展示了一個不必要的迂迴路線。 – sbi 2011-05-18 13:11:59

3

是主要的功能可以採取2個參數

int main(int argc, char* argv[]) 

argc是參數的個數和argv包含的參數列表。

例如,如果你運行你的程序爲:

MyProgram.exe hello 

然後

argc = 2 
argv[0] = MyProgram.exe 
argv[1] = "hello" 
0

在C,你的主函數簽名看起來是這樣的:

int main(int argc, char** argv)

argc包含命令行傳入的參數數量。可執行文件的名稱位於位置0,並將其添加到argc

argv包含一個包含參數的字符串數組。同樣,位置0是可執行文件的名稱。

0

標準C++ main()簽名是

int main(int argc, char* argv[]) 

argc其中表示的命令行參數的計數和argv[]是原始C字符串保持命令行參數的陣列。 argv[0]是從命令行調用的可執行文件。

1

不內置於語言,但它很容易實現:

#include <vector> 
#include <string> 
using namespace std; 

int main(int argc, char *argv[]) { 
    vector <string> args; 
    for (int i = 0; i < argc; i++) { 
     args.push_back(argv[i]); 
    } 
    // do something with args 
} 
+1

你不需要那個循環,'std :: vector'對此有一個很好的ctor。 – sbi 2011-05-17 16:45:31

+0

@sbi我知道,但OP可能會更容易理解我的代碼。 – 2011-05-17 16:46:27

+0

你可以簡單的使用:'std :: vector args(argv,agrv + argc);'。 – Nawaz 2011-05-17 16:51:59

10

你可以使用一個向量來將char數組轉換爲字符串。

#include <vector> 
#include <string> 
using namespace std; 

int main (int argc, char** argv) 
{ 
    vector <string> args (argv, argv + argc); 
} 
+0

如果它不會'使用命名空間標準',我會upvote。 (http://stackoverflow.com/questions/2879555/c-stl-how-to-write-wrappers-for-cout-cerr-cin-and-endl/2880136#2880136) – sbi 2011-05-17 16:44:40

+1

@sbi這不一定是壞事要在.cpp文件中進行。如果這是一個頭文件或比示例1-函數文件更復雜的東西,我可能傾向於同意你的觀點。他不是在同一時間使用Boost或任何其他龐大的圖書館,所以名稱衝突應該不成問題。 – xDD 2011-05-17 16:54:59

+0

這實際上不是將參數傳遞給C++程序的標準方式。 – Pepe 2011-05-17 16:56:27