fs.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void code(char iter, char **iter2, int **iter3){
switch(iter){
case 'A':
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 2;
(*iter3)++;
break;
case 'B':
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'C':
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'D':
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'E':
**iter2 = '.';
(*iter2)++;
**iter3 = 1;
(*iter3)++;
break;
case 'F':
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'G':
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'H':
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'I':
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 2;
(*iter3)++;
break;
case 'J':
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'K':
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'L':
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'M':
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 2;
(*iter3)++;
break;
case 'N':
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 2;
(*iter3)++;
break;
case 'O':
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'P':
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'Q':
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'R':
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'S':
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'T':
**iter2 = '-';
(*iter2)++;
**iter3 = 1;
(*iter3)++;
break;
case 'U':
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'V':
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'W':
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 3;
(*iter3)++;
break;
case 'X':
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'Y':
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case 'Z':
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case '_':
**iter2 = '.';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case '.':
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case ',':
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '.';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
case '?':
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter2 = '-';
(*iter2)++;
**iter3 = 4;
(*iter3)++;
break;
}
}
typedef struct
{
char znak;
char* morse;
} ALPHA;
static ALPHA alpha[] = {
{'A', ".-"},
{'B', "-..."},
{'C', "-.-."},
{'D', "-.."},
{'E', "."},
{'F', "..-."},
{'G', "--."},
{'H', "...."},
{'I', ".."},
{'J', ".---"},
{'K', "-.-"},
{'L', ".-.."},
{'M', "--"},
{'N', "-."},
{'O', "---"},
{'P', ".--."},
{'Q', "--.-"},
{'R', ".-."},
{'S', "..."},
{'T', "-"},
{'U', "..-"},
{'V', "...-"},
{'W', ".--"},
{'X', "-..-"},
{'Y', "-.--"},
{'Z', "--.."},
{'_', "..--"},
{'.', "---."},
{',', ".-.-"},
{'?', "----"}
};
void decode(int iter3, char **iter2){
int i;
char za = (*iter2)[iter3];
(*iter2)[iter3] = 0;
for (i = 0; i < 30; i++)
{
if (!strcmp(alpha
[i
].
morse, *iter2
)) {
break;
}
}
(*iter2)[iter3] = za;
(*iter2) += iter3;
}
int main(){
char *str
= malloc(sizeof(char) * 1000); char *morse
= malloc(4000 * sizeof(char)); int *cisla
= malloc(1000 * sizeof(int)); char *iter;
char *iter2;
int *iter3;
int i;
while (scanf("%s", str
) == 1) {
iter = str;
iter2 = morse;
iter3 = cisla;
while(*iter != 0){
code(*iter, &iter2, &iter3);
iter += sizeof(char);
}
iter3--;
iter2 = morse;
for(; iter3 >= cisla; iter3--){
decode(*iter3, &iter2);
}
}
return 0;
}