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

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

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

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

19.06.2016, 20:04. Просмотров 169. Ответов 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++
есть файл fIn.txt A BC D_IF ___L то есть _ значает что потомка нет (например у B потомок только B, второго нет); ,...

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

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

Запись бинарного дерева - C++
Всем привет! Нужно записать следующий массив (вверху картинки) в бинарное дерево, которое имеет структуру, которая на картинке во...

Прошивка бинарного дерева на С++ - C++
Уважаемые программисты! Может у кого то есть опыт по написанию программы по прошивке бинарного дерева на С++ или подскажет по какому...

Копирование бинарного дерева - C++
Имеется бинарное дерево типа class TreeNode { public: TreeNode(); //конструктор virtual ~TreeNode(); //деструктор ...

Балансировка бинарного дерева - C++
Попалась одна на вид простая задача. Код написал, но не проходит 10 тестов из 40. Лидеру команды &quot;Отбой&quot; на День Рождения подарили...

Высота бинарного дерева - C++
Надо найти высоту бинарного дерева.

Шаблон бинарного дерева - C++
Здравствуйте. Есть одна проблема и не получается её решить, надеюсь вы поможите. Делаю шаблон бинарного дерева. По сути сделал только...

Удаление Узла Бинарного Дерева. - C++
Добрый День.Возникла проблема с реализацией части функции контейнера для удаления элемента с двумя узлами(по всем правилам бинарных...

Класс для бинарного дерева - C++
Здравствуйте! Помогите, пожалуйста, я не вижу ошибок и не понимаю, почему программа не видит меню, не работает так, как нужно( Общее...

Удаление элемента из бинарного дерева - C++
Ругается компилятор в Visual Studio при выполнении кода удаления элемента, а именно в том месте, где нужно удалить элемент с двумя...


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

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

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