Действительное выражение = одна цифра
И
Действительное выражение = ( Действительное выражение + Действительное выражение )
Это означает, что булева функция, которую я пытаюсь создать, будет принимать только как допустимые выражения следующего типа:
5
(5+3)
(6+(3+2))
((7+1)+(5+1))
............... etc.
Я хочу, чтобы параметры моей функции остались такими, какие они есть (istringstream & is), и я хочу использовать get (ch) в своей функции.
Я также хочу сделать это рекурсивно. Тем не менее, я делаю что-то не так, и он проверяет только выражения типа: одна цифра
Где проблема в моей рекурсии? И я знаю, что это даже не правильная рекурсия, я уверен, что правильная рекурсия могла бы выполнить работу даже в меньшем количестве строк и без вложенных ifs.
Спасибо за любые полезные предложения!
#include <iostream>
#include <string>
#include <sstream>
#include <cctype>
using namespace std;
bool isvalid(istringstream& is)
{
char ch;
is.get(ch);
if(ch-'0'>=0 || ch-'0'<=9) return true;
if(ch=='(' && isvalid(is))
{
is.get(ch);
if(ch=='+' && isvalid(is))
{
is.get(ch);
if(ch==')') return true;
}
}
return false;
}
bool empty(istringstream& is)
{
char ch;
is.get(ch);
return is.fail();
}
int main()
{
string s;
while(getline(cin,s))
{
istringstream is(s);
cout<<(isvalid(is) && empty(is) ? "Expression OK" : "Not OK")<<endl;
}
}