Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Преобразование строки и ее разбивка на отдельные символы  (Прочитано 15449 раз)
0 Пользователей и 1 Гость смотрят эту тему.
4y4z
Участник

ru
Offline Offline
Младший саппорт


« : 12-07-2008 07:51 » 

Возникла следующая задача: строка содержит арифметическое выражение, к примеру 2+3, результат которого нужно вычислить. Как можно преобразовать строку, чтобы при присвоении ее значения переменной можно было получить результат выражения.
То есть как примерно получить такой результат:
a = строка_после_преобразования
в данном случае a = 2+3;
Записан

Ищу работу. (разработка/тестирование/отладка)
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 12-07-2008 21:26 » 

Эта задача состоит из двух подзадач:
- разобрать выражение, выделить все числа и операторы,
- вычислить выражение по полученному дереву разбора.

Первая задача по "умному" это называется парсер арифметических выражений. В принципе их в сети много выложено, так как это распространенная задачка в курсах программирования ВУЗов.

Вторая решается элементарным обходом дерева разбора, которое строит по выражению парсер.  В принципе, задача настолько проста, что оба этапа можно объединить в один - разбирать и вычислять значение одновременно.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 13-07-2008 07:40 » 

а че-нибудь типа
eval()
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
4y4z
Участник

ru
Offline Offline
Младший саппорт


« Ответ #3 : 14-07-2008 07:47 » 

В настоящий момент дошел до того, что осталось научить прогу распознавать знаки арифметических выражений. Сам разобрался вроде, но для тех кто столкнется с этой проблемой впервые: для разбора строки использовать StringTokenizer с учетом разделителей. Затем проверить первый символ слова на наличие цифры и в этом случае преобразовать его в число.
В сети валяется SStest.java - скелет для доработки напильником в данной ситуации. Всем спасибо.
Записан

Ищу работу. (разработка/тестирование/отладка)
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 14-07-2008 22:33 » 

А скобки и приоритет операций?
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
4y4z
Участник

ru
Offline Offline
Младший саппорт


« Ответ #5 : 15-07-2008 05:28 » 

а вот в том и дело, что входной файл не содержит скобок и прочих усложнений, но для себя я пока над приоритетом вычислений в скобках тоже думаю.
Записан

Ищу работу. (разработка/тестирование/отладка)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 15-07-2008 05:34 » 

в несложном выражении со скобками бороться тоже не сложно:
1) нактнулись на открывающую скобку
2) ищем парную к ней скобку (сколько открылось, столько должно закрыться)
3) всю строку между двумя скобками отдаём на рекурсивное вычисление
Записан

RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 15-07-2008 05:54 » 

Стоит почитать теорию, чтобы легче понимать, что надо делать.
Есть такая вещь - обратная польская запись. Это когда все аргументы и операции отсортированы в порядке выполнения. Т.е. задача разобрать синтаксис и собрать аргументы и операции в стек, чтобы выполнение началось с наиболее приоритетной операции.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Falsehood
Молодой специалист

ru
Offline Offline
Пол: Женский
не может быть


« Ответ #8 : 15-07-2008 13:11 » 

в статье Альфа https://club.shelek.ru/viewart.php?id=184 хорошо калькулятор разобран. на java-е хорошо пишется.
Записан

Славная трава...
4y4z
Участник

ru
Offline Offline
Младший саппорт


« Ответ #9 : 18-07-2008 09:06 » new

Спасибо RXL за ссылку по ОПН!
Но может у кого есть готовый код на яве, который перегоняет элементы списка LinkedList из инфиксной в постфиксную запись с вычислением выражения на лету. Срочно надо!
Записан

Ищу работу. (разработка/тестирование/отладка)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines