2012-04-25 10 views
0

こんにちはもう一度Stackoverflow、私はここで再び私のC + +のプログラミングクラスの質問です。私が直面している問題は、主にキーボードからのユーザー入力によるものです。私は、どの関数を呼び出すのか、どの引数を関数に与えるのかを決めるためにユーザー入力を取る必要があります。たとえば、add 5のようなものは、引数5でadd関数を呼び出すでしょう。最初に文字列とintの両方を取るために>>演算子をオーバーロードしようとしましたが、プログラムがintなしで入力を取ることができませんでしたdeletemaxというように私はその考えを捨てなければならなかった。だから今私は戻って入力をトークン化するが、私はsstream提供値を格納するために文字列をトークン化する良い方法はありますか?またはユーザーの入力の代わりに

bool out = false; 
string token; 
string In; 
int num; 

do 
{ 
    cout << "heap> "; 
    cin >> In; 
    istringstream iss(In); 
    while(getline(iss, token, ' ')) 
    { 
     cout << token << endl; //I know this is incorrect but just not what to replace it with 
    } 
    out = ProcessCommand (token, num); //Takes string and int to call correct functions 
} while (out != true); 

を使用して、このような何かを思いついたように、私たちは、このプログラムのためにブーストを使用することを許可されていない問題は、私はどのように非常にわからないことです私は2文字列を取得し、2番目の文字列をintに変換できるように、文字列を正しくトークン化します。誰か私に援助を提供することはできますか?私は大いに感謝します。また、私が試しているよりもこれについてもっと良い方法があれば、それも聞いてみたいと思います。

ご協力いただきありがとうございます。

+0

[boost tokenizer](http://www.boost.org/doc/libs/1_49_0/libs/tokenizer/index.html)を使うのが簡単な方法ですが、それはおそらく割り当て。 – juanchopanza

答えて

0

ユーザー入力のすべてを一度に読む必要はありません。

たとえば、ユーザー入力の最初のビット(操作、addまたはdeletemaxなど)を読み取ることができます。そこから、操作に応じて引き続き引き数を入力(addの場合)から読み込むか、すぐに操作を開始することができます(deletemaxの場合)。

1

「C++ string tokenize」はヒット数が多く、最初のヒットはStackoverflowになります。しかし、あなたはそれを刺すべきです。私はそれが運動のポイントだと思っています。

「argumentS」と言っています。これは、サポートするコマンドがさまざまな引数を取ることを示唆しています。私はこのようにそれを打破したい:

  1. は、リスト内の最初のトークンに基づいてリスト
  2. にスペース境界、店舗トークンの「トークン」へのユーザーから
  3. 分割線をラインを読んで、
  4. を実行するコマンドを選択するトリッキーな部分が第2位であることが検証できるように、/引数

としてそれらを解釈し、コマンドにトークンのリストを渡します。コンテナクラスについてまだ知っていますか? vector<string>を使用して、解析するチャンクを保存できます。実際の解析を行うには、文字列の文字を繰り返し処理します。空白以外の文字が見つかるまで(または文字がなくなるまで)空白をスキップします。このポジションを保存:start。空白が見つかるまで(または文字がなくなるまで)、空白以外の部分はスキップします。このポジションを保存:endstartからendまでの部分文字列をコピーし、トークンリストにコピーします。

これの実際の詳細を確認しながら、オフエラー・エラーなどがないことを確認することは、これまで一度もやったことがないと難しいでしょう。ポイント。

0

1つの方法は、キーとして関数名と必要な引数の数を値としてstd::mapにすることです。入力行を読み、関数名を取得してから、引数を必要とするかどうかを判断します。私は、文字列ストリームから抽出された引数のvectorを返す関数、または入力が無効な場合の空のベクトルを書きます。

関連する問題