![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
d3m0n1c |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
В общем, проблема такова. Нужно написать переводчик с русского на азбуку Морзе и обратно и всё это надо сделать на чистом Си. Подскажите как это лучше реализовать. Если можно пример.
![]() |
|||
|
||||
Rififi |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 4 Всего: 36 |
инициализируешь таблицу указателей:
далее в цикле для каждого символа в строке ищешь соответствие по таблице abc_translate[ch] обратно - поиск по массиву структур:
для такой задачи хорошо бы подошел boost::bimap в качестве контейнера данных... но раз на чистом Си, придётся тебе погемороиться... :gigi: |
||||
|
|||||
d3m0n1c |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Ну вообще вот это перевод с русского на азбуку Морзе (пока правда 8 букв). Теперь пару вопросов: 1. Как сделать именно русские буквы. Как я понял из выше написанного топа по ascii-кодам, но у меня не получается. 2. Не совсем понятно какой алгоритм перевода из Морзе на русский, потому что к примеру на сколько я понял в Морзе 1 пробел это 7 точек, как отличить где ещё буква, а где уже начался пробел? |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 4 Всего: 36 |
За единицу времени принимается длительность одной точки. Длительность тире равна трём точкам. Пауза между элементами одного знака — одна точка, между знаками в слове — 3 точки, между словами — 7 точек.
© Wiki следовательно во входном потоке должны быть аналогичные разделители. |
|||
|
||||
d3m0n1c |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Ещё такой вопросик, как мне считать строку с пробелами с помощью scanf? Как я понял, он определяет пробел как конец строки.
P.S. Извините что задаю нубские вопросы, просто СИ для меня тёмный лес. P.P.S. Прочитав более внимательно задание, я понял что мне нужно переводить отдельные символы поэтому получатся что пробелы должны остаться пробелами даже на азбуке Морзе Это сообщение отредактировал(а) d3m0n1c - 13.5.2008, 15:13 |
|||
|
||||
Rififi |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 4 Всего: 36 |
можно поиграться с форматными спецификаторами, например %[^\n]s, но лучше использовать более безопасную функцию fgets:
значит надо придумать другие разделители, илисмиритьсястекстомвыглядящимвоттак(: Это сообщение отредактировал(а) Rififi - 13.5.2008, 17:08 |
||||
|
|||||
d3m0n1c |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Я наверное уже достал своими нубскими вопросами, но всё таки спрошу. Я так и не понял как мне считывать русские буквы, получается если я печатаю к примеру русскую букву то она передаётся в строку в виде пробела.
P.S. Спасибо за подсказку с функцией которая позволяет считывать строку с пробелами. Да и вообще спасибо за помощь. ![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 4 Всего: 36 |
если я печатаю к примеру русскую букву то она передаётся в строку в виде пробела
не понял фразы. при вводе строки с консоли она сохраняется в массиве символов. у каждого символа есть свой код. кстати формально такая запись неправильная: scanf("%s", &str); // кастинг к типу int (*)[256] надо передавать или адрес первого символа массива, или имя массива scanf("%s", &str[0]); или scanf("%s", str); // кастинг к типу int* |
|||
|
||||
d3m0n1c |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
В принципе всё получилось, спасибо. Остался последний вопрос. Я бы хотел сделать что бы пользователь выбирал с чего на что переводить. И столкнулся с такой проблемой, я перед функцией fgets поставил функцию fscan (ну типо меню, для перевода с русского на Морзе нажмите 1, для перевода с Морзе на русский нажмите 2) и получается так что после ввода выбора программа думает что введённое число и есть строка которую надо перевести. В общем как бороться с этим?
Это сообщение отредактировал(а) d3m0n1c - 24.5.2008, 19:16 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |