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