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

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

Восстановить пароль Регистрация
 
PashaTen
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 1
19.06.2016, 20:04     Создание строкового калькулятора на основе бинарного дерева #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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2016, 20:04     Создание строкового калькулятора на основе бинарного дерева
Посмотрите здесь:

Прошивка бинарного дерева на С++ C++
Копирование бинарного дерева C++
C++ создание прошитого бинарного дерева
C++ Обход бинарного дерева
C++ Высота бинарного дерева
C++ Создание бинарного дерева и ограничение на количество узлов в ней
Глубина бинарного дерева C++
Удаление из бинарного дерева C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vort_
 Аватар для Vort_
186 / 186 / 52
Регистрация: 10.07.2012
Сообщений: 400
20.06.2016, 18:37     Создание строкового калькулятора на основе бинарного дерева #2
Рекомендую почитать вот это:
Operator-precedence parser
Yandex
Объявления
20.06.2016, 18:37     Создание строкового калькулятора на основе бинарного дерева
Ответ Создать тему
Опции темы

Текущее время: 12:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru