2012-04-17 4 views
3

私はユーザーから文字列を読み込み、それを使って要求を処理するプログラムを作成しています。ユーザーコマンドのタイプに応じ文字列を複数のプリミティブ型に分割する

  1. 文字列
  2. 文字列の整数
  3. 文字列

:プロンプトを発行した後、私はどちらかの形で3つの可能性のいずれかの応答を期待することができます与え、プログラムは別のタスクを行うことです。私はユーザーの入力を処理しようとするのが難しいです。明確にするために、ユーザーはコマンドを1つの文字列として入力するので、オプション2を実行しているユーザーの例では、プロンプトの後に「年齢8」と入力することがあります。この例では、プログラムは "年齢"を文字列として、 "8"を整数として格納したいと考えています。これについての良い方法は何でしょうか?

私がここで集めたことから、strtok()またはboostを使用することが解決策になるかもしれません。しかし私は両方とも成功しなかったが、誰かが物事をより明確にすることができれば非常に役立つだろう。事前に感謝

+2

「string str; int num; cin >> str >> num; 'はあなたのために働かないのですか? – Shahbaz

+0

私は、唯一の問題は、例のように、ユーザーが文字列stringまたはstringの形式で入力を与えたかどうかを判別する方法であると仮定します。 –

+0

@Shahbaz:3の場合は動作しません。行を読んでから、おそらく 'stringstream'を解析したいでしょう。 –

答えて

6

std::getlineで1行の入力を取得した後には、std::istringstreamを使用して、後で処理するためにテキストをリサイクルすることができます。

// get exactly one line of input 
std::string input_line; 
getline(std::cin, input_line); 

// go back and see what input was 
std::istringstream parse_input(input_line); 

std::string op_token; 
parse_input >> op_token; 

if (op_token == "age") { 
    // conditionally extract and handle the individual pieces 
    int age; 
    parse_input >> age; 
} 
+0

ありがとう、非常に役に立ちます。 –

+0

@JaimieKnoxようこそ!これで問題が解決した場合は、この答えの左上にある緑色のチェックマークをクリックしてください。 – Potatoswatter

関連する問題