0

私は C++ プログラムを持っています。メインの最初の引数 (argv[1]) を float のテーブルに対応させたいと思います。それは可能ですか??

float をスペースで区切った文字列 (例: "1.12 3.23 4.32 1.1 ...") を入れることを考えていました。そのような文字列を float のテーブルに自動的に変換する方法はありますか? 私がよく理解している場合、atof 関数は文字列を double に変換します。そのため、スペースを使用して文字列を分割し、atof を使用して各部分を変換することができるようです。このオプションはあまり効率的ではないように思われますか? さらに、float ではなく double を返します :(

では、float のテーブルを C++ プログラムの引数として渡すより良い方法はありますか?

ありがとうございました

4

4 に答える 4

4

Astringstreamは、スペースでの分割とフロートへの解析の両方を行うことができます。

std::stringstream ss(the_string);
std::vector<float> v(std::istream_iterator<float>(ss),
                     (std::istream_iterator<float>()));
                   // the extra parentheses here are ugly but necessary :(

データを含む文字列を取得する方法は、文字列の大きさとどこから来るかによって異なります。多くのシステムでは、 program に渡される引数はすでにスペースで分割されており、各部分が の異なる要素に配置されていることに注意してくださいargv

于 2012-08-10T10:47:26.357 に答える
2

テキスト ファイルに保存し、プログラムの起動時にファイルから読み取ります。コマンドライン引数として渡す価値はありません。

于 2012-08-10T10:41:59.057 に答える
0

main() パラメータ一覧はそのままです。数値の文字列を引数としてプログラムに渡すことができます。メイン関数はその引数を解析する必要があります。

スペースで区切られた数値のリストを渡したい場合argv[1]は、関数を使用しstrtokて個々の数値文字列を取得し、それを変換関数に渡す必要があります。

変換関数が double を返す場合、結果が float で表現できることを確認し、値を float 変数にキャストする必要があります。しかし、内部表現として double を使用することを検討します。

于 2012-08-10T10:46:47.867 に答える
0

シンガーの回答に加えて、コマンドラインは主にコンピューターではなく人間が使用する必要があります。値の表が本当に必要な場合は、構成ファイルを使用してください。人間が読める形式をいつでも使用できます。

于 2012-08-10T10:48:10.923 に答える