Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PashaTen
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 1
#1

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

19.06.2016, 20:04. Просмотров 198. Ответов 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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2016, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание строкового калькулятора на основе бинарного дерева (C++):

Построение бинарного дерева на основе не бинарного - C++
В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще...

Словарь на основе бинарного дерева - C++
Объясните, пожалуйста, что делает программа в функциях push и как осуществляется поиск, не совсем понимаю, для чего нужны l,r. Получается ,...

Создание бинарного дерева из бинарного файла - C++
struct Bin { string name; string city; int players; int score; }; void ReadFromBin(Point*&amp; Tree) { Bin q;

Создание бинарного дерева - C++
Есть задания и я знаю как их сделать, но не понимаю, как создать и вывести на экран бинарное дерево. Подскажите пожалуйста, ссылки, коды,...

Создание прошитого бинарного дерева - C++
есть файл fIn.txt A BC D_IF ___L то есть _ значает что потомка нет (например у B потомок только B, второго нет); ,...

Создание бинарного дерева поиска - C++
Людииииии помогите пож-таааа.....Нужно создать бинарное дерево поиска, считывая элементы из текст файла.. Очень нужноооо:( кто нибудь:(:(...

1
Vort_
188 / 188 / 52
Регистрация: 10.07.2012
Сообщений: 400
20.06.2016, 18:37 #2
Рекомендую почитать вот это:
Operator-precedence parser
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2016, 18:37
Привет! Вот еще темы с ответами:

Создание бинарного дерева и ограничение на количество узлов в ней - C++
В задании по созданию бинарного дерева есть условие на то, что узлов в дереве должно быть не больше 10. Пробую поставить такое ограничение...

Запись бинарного дерева в файл и восстановление из него этого дерева - C++
Задача такая: есть бинарное дерево. Каждый элемент дерева содержит 3 указателя - 1 указатель на структуру с данными, 2 и 3й указатель на...

Написать шаблон бинарного дерева с функцией распечатки дерева - C++
Не понимаю, что от меня хотят. Дано такое задание: Написать шаблон бинарного дерева с функцией распечатки дерева *(+(d,e),c) в виде...

Получение типа на основе строкового литерала - C++
Добрый вечер, как можно красиво получить тип на основе строкового литерала? Foo&lt; GetType(&quot;A&quot;) &gt;::hello( 1, 2);


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru