ユーザー入力から特定の中置式を検証するメソッドを作成する必要があります。これはベクトルになります。
開始区切り文字と終了区切り文字のバランスをとるメソッドの一部を既に実行しています。現在、式の構文をチェックするヘルパー メソッドを追加しています。たとえば、次のケースは、エラーを含め、プログラムの実行時に発生します。
validate (4+5)
returns true
validate (45+)
returns false
validate 45+
Vector out of range.
これは の呼び出しが原因で発生していると思いますv.at(i+1).type
が、 if ステートメントを追加してfalse
if myを返すようにした後int i = v.size() && tt.type == OPERATOR
、最後のトークンが演算子であるかどうかを確認しても、同じベクトルが範囲外エラーになりました。
このエラーが発生する理由について何か意見はありますか?
bool isValArith(vector<Token> v){
bool lol;
Token tt;
stack<Token> st;
for (int i = 0; i < v.size(); i++){
tt= v.at(i);
if (tt.type != OPERATOR && tt.value != "[" && tt.value != "(" &&
tt.value != "{" && tt.value != "}" && tt.value != ")" &&
tt.value != "]"){
st.push(tt);
}
if (tt.type == OPERATOR){
if (st.top().type != OPERATOR && v.at(i+1).type != OPERATOR &&
v.at(i+1).value != "[" && v.at(i+1).value != "{" &&
v.at(i+1).value != "(" && v.at(i+1).value != "}" &&
v.at(i+1).value != "]" && v.at(i+1).value != ")"){
lol = true;
cout << "here" << endl;
}
else {
cout << "Error: Invalid Expression" << endl;
lol = false;
}
}
}
return lol;
}