所以我應該接受用戶輸入並評估用戶輸入是否是有效的中綴表達式。我只接受+ -/* ()
和數字。 所以最簡單的方法是使用正則表達式。正則表達式,當我不認爲它應該在C++
這是我的正則表達式:[\(\)\d\+\-\/\*]+
。 我也試過:[\(\)0-9\+\-\/\*]+
以及 [\(\)[:digit:]\+\-\/\*]+
我還沒有轉義字符嘗試,但我仍然得到同樣的結果。
問題是,當我把=
作爲表達式,它通過。下面
代碼:
cout<<"Enter the infix expression: ";
cin>>userInput;
regex infix ("[\(\)\d\+\-\/\*]+");
while(cin.fail()||regex_match(userInput,infix)){
cin.clear();
cin.ignore(256, '\n');
cout<<"Error: Not a valid infix expression!\n";
cout<<"Enter the infix expression: ";
cin>>userInput;
}
cout<<"Valid expression!\n";
電流輸出:
Enter the infix expression: =
Valid expression!
預期輸出:
Enter the infix expression: =
Error: Not a valid infix expression!
請讓我知道如果你需要更多的代碼。
我從來沒有做過在C++中,但在其他的語言,你不需要在使用逃脫大多數字符的正則表達式方括號,但' - '需要放在最後。我會嘗試'「[()+/* \ d - ]」' – TallChuck
我認爲反斜槓字符本身必須逃脫,不是嗎? '「[()+/* \\ d - ]」' –
你意識到Regex永遠不會驗證中綴表達式嗎? – NetMage