указатели — наиболее эффективные & amp; самое простое решение для оценки выражений Stack Overflow

Многие программы должны оценивать такие выражения, как:

вход: (T (TF)) —> выход: ложь (T как истина, а F как ложь)

ИЛИ ЖЕ

вход (a (b c 2) 3) $ —> выход: abcbcabcbcabcbc

другими словами, как обращаться с выражениями, содержащими фигурные скобки?

Я использовал толкать, чтобы сложить, пока я не достиг «)».
затем нажимайте, пока я не достигну ‘(‘, и так далее.
но это заняло бы много времени выполнения и промах кода!

и если я попытаюсь использовать код @Henrik для решения арифметического выражения, я получу неправильный ответ

#include <iostream>
using namespace std;
const char * expressionToParse = "(T(TT))";
char peek()
{
return *expressionToParse;
}

char get()
{
return *expressionToParse++;
}
bool expression();
bool number()
{
bool result = get() - '0';
//even if I remove -'0'
cout<<"number() result:"<<result<<endl;
while (peek() == 'T' || peek() == 'F')
{
if (peek()=='T' && get()=='T') {
result=true;
}
else{
result=false;
}
}
return result;
}
bool factor()
{
if (peek() == 'T' && peek() <= 'F')
return number();
else if (peek() == '(')
{
get(); // '('
bool result = expression();
get(); // ')'
return result;
}
return 0; // error
}bool expression()
{
bool result = factor();
return result;
}

int main()
{

bool result = expression();
if(result){
cout<<"true";
}
else{
cout<<"false";
}

return 0;
}

Заранее спасибо

0

Решение

Это выражение в постфиксной форме. Самый простой способ оценить выражение postfix можно сделать с помощью стека. Ищите учебники по постфиксной оценке выражений.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector