私は入力として文字列を与えるプログラムを書いています。この文字列は通常の用語でなければなりません。 "5 + 3/2"であり、すべての数字と演算子は空白で区切られなければなりません。入力できる期間は、必要な期間だけ長くする必要があります。 "1 * 2 * 5 - 1 * 4 + 1 + 5 + 3 + 3 + 3"もうまくいくはずです。 +、 - 、*、および/は、使用が許可されている唯一の演算子です。などの文字列を計算するための他のアイデア。 "5 + 3/2"
私はすでに動作しているコードを持っています。 *および/およびbefore +および - の事実を無視します。しかしそれは他のすべてを完全に行います。 2つの配列を作成し、演算子をchar配列(char演算子[])に保存し、もう一方の配列は浮動小数点配列(float values [])に整数を保存します。私はこの計算方法を持っています:
void calc(float values[], char operators[]) {
float res_final;
float res_array[10];
int counter = (sizeof(values)/sizeof(*values));
for (int i = 0; i < getBorder(values); i++) {
if (i == 0) {
res_array[i] = switchFunction(values[i], values[i + 1], operators[i]);
}
res_final = switchFunction(res_array[i], values[i + 2], operators[i + 1]);
res_array[i+1] = res_final;
if (i == getBorder(values)) {
break;
}
}
std::cout << "evaluation of expression is: " << res_final << std::endl;
}
float switchFunction(float val_1, float val_2, char op) {
switch (op) {
case '+': return val_1 + val_2;
break;
case '-': return val_1 - val_2;
break;
case '*': return val_1 * val_2;
break;
case '/': return val_1/val_2;
break;
}
return 0;
}
よく、コードは本当にかわいいですが、私はもっと役に立つものを考え出すことができませんでした。私は非常に多くのアイデアを持っていますが、それは演算子になるとすべてが失敗しました。私は通常の+を '+'で定義し、残りのものも定義したかったのですが、これはうまく動作しません。そう
あなたが行の前にポイントを含める方法上の任意の提案を持っているか、あなたは私に完全に異なるアプローチを持っている場合、私はそれを聞いて喜んでいるだろう場合:)
特定の質問がありますか?もしそうでなければ、あなたの質問は話題とは異なるです。 [コードレビュー](https://codereview.stackexchange.com/)をお探しですか? –
'sizeof(values)/ sizeof(* values)'は関数内では機能しません。 [逆ポーランド記法](https://en.wikipedia.org/wiki/Reverse_Polish_notation) –
に変換する必要がある中置式を計算するには、http://stackoverflow.com/questions/13421424/をご覧ください。 1つのスキャンを使用してスタック中の式を評価する方法を示します。 – mangupt