![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Kronit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 28.9.2006 Где: МОСКВА Репутация: нет Всего: нет |
Здравствуйте. У меня такое задание. Мне нужно перевести выражение из префиксной записи в обратную польскую (т.е, например, +a*bc --> bc*a+ ). Я так понимаю, что польская обратная запись - это просто постфиксная запись. Я даже понимаю, что мое изначальное выражение (в преф. записи) нужно просто переписать в обратном порядке (в постф. запись). Естественно со всеми проверками на корректнось введенного префиксного выражения. Только символы, не являющиеся знаками, переписать надо в обратном порядке, но не меняя их местами...т.е. как bc не меняются на cb в моем примере. Надеюсь Вы поняли..)
только у меня проблема. Как переписать выражение в обратном порядке - это эллементарно. Но вот как при этом не менять местами символы, не равные знаку? выбрать их можно:
а что дальше? буду ждать ваших предложений. Заранее спасибо. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Выбирай из входной строки подстроки разделенные знаками начиная с конца. Потом их целиком в выходную строку скидывай.
|
|||
|
||||
| Kronit |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 28.9.2006 Где: МОСКВА Репутация: нет Всего: нет |
Только я не совсем понимаю как это сделать...делать так:
Но только так в массиве b будут все символы-незнаки подряд и в обратном порядке... А как вбивать в отдельные массивы? сколько массивов создавать? я же не знаю сволько будит этих блоков символов между знаками. Это сообщение отредактировал(а) Kronit - 19.11.2006, 17:58 |
||||
|
|||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
strrev() не поможет?
-------------------- СУВ, Partizan. |
|||
|
||||
| Kronit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 28.9.2006 Где: МОСКВА Репутация: нет Всего: нет |
Впринципе переписать строку в обратном порядке так действительно проще, чем через цикл for. Но мне же надо чтобы символьные подстроки(не знаки) не менялись местами. теперь мне надо чтоб строка: +abc*ab была переписана в строку +cba*ba. Тогда после strrev() у меня и получится нужная строка ab*abc+ как мне буквы поменять местами? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
разбить строку на токены с пом strtok()...в качестве символов-разделителей взять символы арифметических операций и для каждой полученной подстроки сделать strrev....
нерационально, но работать должно... -------------------- СУВ, Partizan. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
с помощью strtok всё становится совсем просто...
-------------------- СУВ, Partizan. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: нет Всего: 67 |
держи вот...написал пока делать нечего было...
-------------------- СУВ, Partizan. |
|||
|
||||
| Kronit |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 28.9.2006 Где: МОСКВА Репутация: нет Всего: нет |
Оки...спасибо выручил..щас буду разбираться. Правда я на С пишу, но думаю Сpp тоже пойму. Это сообщение отредактировал(а) Kronit - 20.11.2006, 23:14 |
||||
|
|||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |