答えて
ない正確にはできますが、簡単に近づくことができます。
#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;
}
これは単にベクターにコマンドライン引数をコピーし、イテレータのペアを終了/初めを取るのstd ::ベクトルのオーバーロードされたコンストラクタを使用しています。そこからのjavaとほとんど同じです。
同様に、引数を変換するユーティリティメソッドを使用して、そのベクトルの周りに構築したり、オブジェクトを処理したりすることはできますが、ほとんど意味がありません。また、コマンドラインスイッチの解釈などを扱う多くのオブジェクトが含まれています。 ACE、POCO、QTなどはすべてこのような施設が付いています。
はい主な機能はargc
は、引数の数であるとargv
は、引数のリストが含まれている2つの引数
int main(int argc, char* argv[])
を取ることができます。例えば
は、あなたのようにあなたのプログラムを実行する場合:Cで
MyProgram.exe hello
その後
argc = 2
argv[0] = MyProgram.exe
argv[1] = "hello"
、メイン関数のシグネチャは次のようになります。
int main(int argc, char** argv)
。
argc
には、コマンドラインで渡される引数の数が含まれています。実行ファイルの名前は0の位置にあり、argc
に1が追加されます。
argv
には、引数を含む文字列の配列が含まれています。ここでも位置0は実行可能ファイルの名前です。
標準C++ main()
署名がargc
は、コマンドライン引数の数を表し、argv[]
は、コマンドライン引数を保持するプリミティブC文字列の配列である
int main(int argc, char* argv[])
あります。 は、コマンドラインから起動される実行可能ファイルです。
言語に組み込まれていないが、実装がその非常に簡単:
#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
}
ベクトルを使用して、文字配列を文字列に取得できます。
#include <vector>
#include <string>
using namespace std;
int main (int argc, char** argv)
{
vector <string> args (argv, argv + argc);
}
'namespace std'を使用しない場合、私はこれをupvoteします。 (http://stackoverflow.com/questions/2879555/c-stl-how-to-write-wrappers-for-cout-cerr-cin-and-endl/2880136#2880136) – sbi
@sbiそれは必ずしも悪いことではありません.cppファイルの中で行うこと。これがヘッダーか、例1関数ファイルより複雑なものであれば、私はあなたに同意する傾向があります。彼はBoostや他の巨大な図書館を使っているわけではないので、名前の衝突は問題ではないはずです。 – xDD
これは実際にはC++プログラムに引数を渡す標準的な方法ではありません。 – Pepe
あなたはWin32アプリケーションを作成している場合、あなたはGetCommandLineW http://msdn.microsoft.com/en-us/library/ms683156(VS.85).aspxとCommandLineToArgW http://msdn.microsoft.com/en-us/library/bb776391(VS.85).aspx
を使用することができ、あなたの実行ファイルがパスにスペースがあり、場合に必要とされる特別な取扱いについてCommandLineToArgページにコメントがありますあなたが扱わなければならないかもしれない議論はありません。
- 1. javaのようなC++のような読み込み文字ですか?
- 2. 文字列のような要素なもので、Javaの
- 3. PythonのGQLのような、文字列からのjava googleアプリケーションエンジンクエリ
- 4. Javaのコマンドラインから文字列のリストを読み取る
- 5. Cのコマンドラインからの文字列または文字の入力
- 6. 検索エンジンのようなjava文字列検索の構文
- 7. SQLのようなC#での文字列の比較
- 8. 私はどのように文字列配列内の文字列にintをリンクするのですか?java
- 9. Javaの文字列の関数のようなクイックパラメータ
- 10. のJava:文字列配列のリスト及びこのような試験で
- 11. Java:コマンドラインのインプリメンテーションのような画面
- 12. 文字列をJavaでどのようにコピーすればよいですか?
- 13. T-SQLのような文字列の文字列
- 14. クエリ文字列内の%2cのような文字列
- 15. URLのような文字列をC#のxml文字列に変換しますか?
- 16. どのようにエスケープ文字でC#で文字列を構築する
- 17. C++/CLIおよび.NETうち、文字列のC#で
- 18. c#文字列の配列内で異なる順列を持つ文字列値を見つけよう
- 19. C:コマンドラインの特殊文字を文字列に取り込む方法
- 20. Cの文字配列から文字列を取得するにはどうすればよいですか?
- 21. が、私はこのような文字列持つC#の
- 22. Byte []配列から文字列へのC#からエンコーディングなしのJavaへ
- 23. Javaの文字列の文字列
- 24. どのように目的のcの文字列列挙などを行う
- 25. Javaのようにobjcでデコードする文字列
- 26. Visual C++のようなEclipse文字セット
- 27. Java:ファイル名と文字列をコマンドラインに渡す
- 28. 配列のような文字列をJavaのArrayListに変換する
- 29. 文字列のようなパスを文字列から抽出する
- 30. 2つの文字(Java)のこのような私は、Javaの文字列を持っている
最初にすべての引数を 'std :: vector'にコピーする目的は何ですか?同じループが 'argv'を直接反復することもできます。 – sbi
@sbi - 要点はOPの質問に答えたことです。彼が達成したいことは、より良いOPに向けられています。 – Duck
それはナンセンスです。 'argv'へのインデックス付けは、seanの質問にも同様に答えました。その引数をベクトルにする方法を尋ねるところはありませんでした。あなたは彼に不必要に丸い道を見せただけです。 – sbi