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

Морзянка... - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Зачем нужные поразрядные операции. Книга Павловская, Щупак http://www.cyberforum.ru/cpp-beginners/thread47754.html
Решаю задачу из учебника Павловская, Щупак. С++. Программироание на языке высокого уровня. Структурное программирование. Практикум. Часть 1. Семинар 2. Задача 1. стр. 44. Задачу см. в привязанном...
C++ проблемы с памятью.... с алгоритмом вроде все нормально но вот происходит такая вещи при определенном действии выдается сообщение которое на скриншоте.... потом высвечивается вот эта строка int Put_Reis(FILE *f_reis, MAP... http://www.cyberforum.ru/cpp-beginners/thread47753.html
Матрица.Поиск точки C++
У меня есть матрица 25 х 80.Есть функция,которая принимает ссылку на матрицу и текущее расположение(координаты точки). Мне нужно найти данную точку(т.е. отдельный класс создан). Обзор видимости 5...
C++ Перегрузка + для строк
есть задача перегрузить = и + таким образом чтобы: строка1=срока2+строка3 с = проблем нет. а вот при перегрузке + выдает ошибку при доступе к закрытым данным //STRING2.H #ifndef STRING2_H...
C++ Как подключить к проекту новый файл с функцией http://www.cyberforum.ru/cpp-beginners/thread47701.html
Есть работающий проект на C++ (dll) Хочу в Visual Studio 2008 создать в проекте отдельный файл и в этом файле создать свою функцию которую можно было бы вызывать из существующих файлов Я создал в...
C++ Выход по ESC Приветствую вас уважаемые "чатлане"! .Пишет вам "пацак". Я начал с Borland C++ 3.1. Наверное все очень просто на самом деле, но как и у всех начинающих ...Есть инструкция - вывод символа на экран и... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714

Морзянка... - C++

20.08.2009, 04:40. Просмотров 4412. Ответов 29
Метки (Все метки)

В одном из учебников наткнулся на задачу - написать переводчик англ. букв и цифр в азбуку Морзе. Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
/* Транслятор азбуки морзе. Версия 0.03b */
 
/* str2morse - перевод строки в морзянку. str - исходная строка, mstr - конвертированная, max - макс. длинна конвертированной строки 
для наглядности между "буквами" вставляется пробел, между "словами" три пробела */
char *str2morse(char *str, char *mstr, int max){
    static char *letters[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
    static char *digits[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."};
    static char space[] = " ";
    int c;
    int index;
    
    *mstr = '\0';
    while ( *str ){
        /* Вставить пробел, если не первый символ */
        if ( strlen(mstr) > 0 ) {
            if ( strlen(mstr) + strlen(space) < max )
                strcat(mstr, space);
            else 
                break;
        }   
        
        c = toupper(*str);
        /* Если с - буква */
        if ( c >= 'A' && c <= 'Z' ){
            index = c - 'A';
            if ( strlen(mstr) + strlen(letters[index]) < max ) 
                strcat(mstr, letters[index]);
            else 
                break;
        }
        /* Если с - цифра */
        else if ( c >= '0' && c <= '9' ){
            index = c - '0';
            if ( strlen(mstr) + strlen(digits[index]) < max ) 
                strcat(mstr, digits[index]);
            else 
                break;
        }
        /* Если с - пробел */
        else if ( c == ' ' ) {
            if ( strlen(mstr) + strlen(space) < max )
                strcat(mstr, space);
            else 
                break;
        }
        
        str++;
    }
 
    return mstr;
}
 
int main(){
    char text[BUFSIZ];
    char morse[BUFSIZ];
    
    while ( fgets(text, BUFSIZ, stdin) ) {
        if ( str2morse(text, morse, BUFSIZ) == NULL ) {
            fprintf(stderr, "Can't convert string!\n");
            return 1;
        }
        else {
            printf("%s\n", morse);
        }
    }
    
    printf("Good bye!\n");
    return 0;
}
Прокомментируйте, пожалуйста, кому не сложно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru