Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 16.04.2018, 21:59   #1
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 37
Репутация: 10
По умолчанию Разобрать(парсить) арифметическое выражение

Нужно считать из файла арифметическое выражение, которое может включать "+-/*" и числа/переменные -----> (сделано)
Далее нужно построить дерево так, чтобы узлами его были операции, а листьями операнды. ------> (помогите)
Дерево знаю как записать, но распарсить строку для вычисления последовательности записи не могу. Думал разбирать рекурсивно с конца, если нахожу + или - не внутри скобок, то разбивать левую и правую часть выражения на соответствующие поддеревья и рекурсивно продолжать, если уже нету +- вне скобок, то искать уже */, а потом идти в скобки, но не могу реализовать. Хелп!
P.S. Выражение не надо подсчитывать, просто записать в дерево и потом вывести.
Код:

void input(char**&, int&);
 
int main() {
    int len = 0;
    char **str = new char*[100];
    for (int i = 0; i < 100; i++) {
        str[i] = new char[15];
    }
    input(str,len);
    for(int i = 0;i<len;i++)
        cout << " " << str[i];
 
    _getch();
    return 0;
}
 
void input(char**&str, int&len) {
    const char *file = "input.txt";
    ifstream in(file, ios::in);
    if (!in) {
        cerr << "File was not found";
        _getch();
        exit(EXIT_FAILURE);
    }
    char*buff = new char[15];
    while (in.good()) {
        in.getline(buff, 15, ' ');
        strcpy(str[len],buff);
        len++;
    }
    in.close();
}

Для 30+5*8-(5+5) должно выйти что-то типа того :
________[-]
___[+]_______[+]
[30]__[*]____[5]_[5]
____[5]_[8]
P.Р.S. Знаю, что память не чищу

Последний раз редактировалось alexboliam; 16.04.2018 в 22:03.
alexboliam вне форума   Ответить с цитированием
Старый 21.04.2018, 20:40   #2
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 37
Репутация: 10
По умолчанию

Up!
alexboliam вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Арифметическое выражение. Решить квадратное уравнение и посчитать выражение, используя вычисленные корни. dauletsergazin Паскаль 4 13.11.2017 12:55
Вычислить арифметическое выражение в турбо паскале Ksuu Помощь студентам 16 13.04.2015 00:34
Разобрать математическое выражение на лексемы egrozavr Помощь студентам 2 23.04.2014 17:35
Арифметическое выражение vadiprog Помощь студентам 3 03.10.2011 08:35
Задача «Арифметическое выражение» Diamond2107 Assembler 28 13.06.2011 21:08


01:40.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru