0

私はコマンドラインコンバーターを書き始めていますが、唯一の懸念はユーザー入力です (残りは難しくありません)。プログラムには (convert 2 m to km) のようなコマンドがほとんどないため、ユーザーがそれを入力すると、プログラムは変換された値を出力します。私の質問は、ユーザー入力を解析し、ユーザーが入力したコマンドを判断する最良の方法は何ですか? ユーザー入力を単語の配列に分割してから関数に渡す必要があるので、何かを行うことができますか、それとも別の方法がありますか?

4

3 に答える 3

1

私はいくつかのタイプの「単純なパーサー」(およびいくつかのより高度なパーサー) を作成しました。あなたの説明から、コマンドが「2 m を km に変換する」である場合、スペースで物事を分割するだけで済みます。

もちろん、「convert2mtokm」と「convert 2m to km」を許可すると、対処が少し難しくなります。「単語間に(少なくとも 1 つの)スペースが必要であるという厳格なルール」を守ることで、生活がずっと楽になります。

その時点で、vector<string> cmd対処できることができます。たとえば、次のようになります。

if (cmd[0] == "convert")
{
    convert(cmd); 
}

... 

void convert(vector<string> cmd)
{
    double dist = stod(cmd[1]);
    string unit_from = cmd[2]; 
    string unit_to = cmd[4]; 
    if(cmd[3] != "to")
    {
         ... print some error ... 
    }
    double factor = unit_conversion(unit_from, unit_to);
    cout << "that becomes " << dist * factor << " in " << unit_to << endl;
}
于 2013-05-30T22:10:47.440 に答える