Форум программистов, компьютерный форум CyberForum.ru

Создание строкового калькулятора на основе бинарного дерева - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как на языке C++ записать 3<X<10? http://www.cyberforum.ru/cpp-beginners/thread1766546.html
Как на языке C++ записать следующее условие 3<X<10: 1) ((X>3) and (X<10)); 2) ((X>3) || (X<10)); 3) ((X>3) or (X<10)); 4) ((X>3) && (X<10)).
C++ Как открыть файл? Как открыть файл или программу через с++? К примеру есть приложение .exe, я открываю с++ программу и .ехе открывается. Просто открыть(не в консоли, а просто запустить, как если бы я вручную открыл этот файл) http://www.cyberforum.ru/cpp-beginners/thread1766545.html
C++ Оператор множественного выбора
Какой из перечисленных операторов является оператором множественного выбора? 1) if 2) switch 3) continue 4) break
C++ Как в языке С++ описываются переменные целого типа?
1) float a, b, y; 2) double a, b, y; 3) int a, b, y; 4) bool a, b, y.
C++ Запомнить введенное значение в целочисленной переменной http://www.cyberforum.ru/cpp-beginners/thread1766533.html
Напишите один оператор С++, соответствующий следующему: Прочтите целое число с клавиатуры и запомните введенное значение в целой переменной price.
C++ Какой препроцессор используется для подключения стандартной библиотеки ввода-вывода? Какой препроцессор используется для подключения стандартной библиотеки ввода-вывода? 1) include 2) iostream 3) define 4) io.sys подробнее

Показать сообщение отдельно
PashaTen
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 1

Создание строкового калькулятора на основе бинарного дерева - C++

19.06.2016, 20:04. Просмотров 142. Ответов 1
Метки (Все метки)

Вот мой исходник. Проблема заключается в том, что не получается разложить строку на операторы с соответствующим приоритетом и операнды, следовательно выдает неверный ответ.

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <string>
#include <sstream>
using namespace std;

template <typename T> class Node {
T data;
public:
Node *left, *right;
void BinTreeRecurs( const string &str, Node<T> *n);
T recurs( Node* node );
};

template <typename T> void Node<T>::BinTreeRecurs( const string &str, Node<T> *n)
{
bool chk = 0;
cout << str <<endl;
for (int i = 0; i < str.size(); i++)
{
if (str[i] == '+' || str[i] == '-')
{
n->left = new Node;
n->right = new Node;
n->data = str[i];
BinTreeRecurs(str.substr( 0, i ), n->left);
BinTreeRecurs(str.substr( i+1,str.size()-1), n->right);
return;
}

if(str[i] == '*' || str[i] == '/')
{
n->left = new Node;
n->right = new Node;
n->data = str[i];
BinTreeRecurs(str.substr( 0, i ), n->left);
BinTreeRecurs(str.substr( i+1,str.size()-1), n->right);
return;
}
}
}

template <typename T> T Node<T>:: recurs( Node* node )
{
cout << "==========================" <<endl;
T val = 0 ;
switch( node->data ) // Проверяет тип Узла
{
case '+': // '+'
val = recurs( node->left ) + recurs( node->right );
break;
case '*': // '*'
val = recurs( node->left ) * recurs( node->right );
break;
case '-':// '-'
val = recurs( node->left ) - recurs( node->right );
break;
case '/':// '/'
val = recurs( node->left ) / recurs( node->right );
break;
val = node->data;
cout << "(" << val << ")" << endl;
break;
}
return val;
}

void main(){
Node<int> *n = new Node<int>;
string str;
cin >> str;
n->BinTreeRecurs(str, n);
n->recurs(n);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru