Задача
Морзянка. Вводимый с клавиатуры или из файла текст перевести в последовательность точек и тире с помощью азбуки Морзе. Результат можно иллюстрировать звуком.
Тесты:
| Текст | Результат | Комментарий | 
| SOS | …—… | пройден | 
| A true SOS !!! | .- -…- — .-. ..- . -…- … — … -…- —..— —..— —..— -…- | пройден | 
Код:
| 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 | #include <iostream> #include <string> #include <map> #include <cctype> using namespace std; map <char, string> morze = {     	{ 'a', ".-"},     	{ 'b', "-..."},     	{ 'w', ".--"},     	{ 'g', "--."},     	{ 'd', "-.."},     	{ 'e', "."},     	{ 'v', "...-"},     	{ 'z', "--.."},     	{ 'i', ".."},     	{ 'j', ".---"},     	{ 'k', "-.-"},     	{ 'l', ".-.."},     	{ 'm', "--"},     	{ 'n', "-."},     	{ 'o', "---"},     	{ 'p', ".--."},     	{ 'r', ".-."},     	{ 's', "..."},     	{ 't', "-"},     	{ 'u', "..-"},     	{ 'f', "..-."},     	{ 'h', "...."},     	{ 'c', "-.-."},     	{ 'q', "--.-"},     	{ 'y', "-.--"},     	{ 'x', "-..-"},     	{ '1', ".----"},     	{ '2', "..---"},     	{ '3', "...--"},     	{ '4', "....-"},     	{ '5', "....."},     	{ '6', "-...."},     	{ '7', "--..."},     	{ '8', "---.."},     	{ '9', "----."},     	{ '0', "-----"},     	{ '.', "......"},     	{ ',', ".-.-.-"},     	{ ':', "---..."},     	{ ';', "-.-.-."},     	{ '(', "-.--.-"},     	{ ')', "-.--.-"},     	{ '"', ".-..-."},     	{ '-', "-....-"},     	{ '/', "-..-."},     	{ '?', "..--.."},     	{ '!', "--..--"},     	{ ' ', "-...-"},     	{ '@', ".--.-."}, }; int main() { 	string text; 	while(cin >> text) { 	    for(int i = 0; i < text.length(); i++) { 	    	text[i] = tolower(text[i]); 	    	cout << morze.find( text[i] )->second <<"  "; 	    } 	    cout << morze.find(' ')->second << "  "; 	} 	return 0; } | 
Я создала ассоциативный массив через map, и связала буквы («ключ«) и соответствующие им значения в азбуке Морзе («значение«). Чтобы не заполнять его еще и большими буквами, во вводимом тексте уменьшаю буквы с помощью функции tolower .
Решение через c-string :
| 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 74 75 | #include <iostream> #include <cstring> #include <stdio.h> #include <cctype> using namespace std; int main() { 	char text[254]=""; 	char mrz[10] ; 	if ( fgets( text, sizeof(text), stdin ) == NULL ) { 		cout << "Произошла ошибка или был прочитан EOF\n";     }     else { 	    for(int i = 0; i < strlen(text); i++) { 	    	text[i]=tolower(text[i]); 	        switch (text[i]){ 		         case 'a': sprintf(mrz,".-"); break; 		         case 'b': sprintf(mrz,"-..."); break; 		         case 'w': sprintf(mrz,".--"); break; 		         case 'g': sprintf(mrz,"--."); break; 		         case 'd': sprintf(mrz,"-.."); break; 		         case 'e': sprintf(mrz,"."); break; 		         case 'v': sprintf(mrz,"...-"); break; 		         case 'z': sprintf(mrz,"--.."); break; 		         case 'i': sprintf(mrz,".."); break; 		         case 'j': sprintf(mrz,".---"); break; 		         case 'k': sprintf(mrz,"-.-"); break; 		         case 'l': sprintf(mrz,".-.."); break; 		         case 'm': sprintf(mrz,"--"); break; 		         case 'n': sprintf(mrz,"-."); break; 		         case 'o': sprintf(mrz,"---"); break; 		         case 'p': sprintf(mrz,".--."); break; 		         case 'r': sprintf(mrz,".-."); break; 		         case 's': sprintf(mrz,"..."); break; 		         case 't': sprintf(mrz,"-"); break; 		         case 'u': sprintf(mrz,"..-"); break; 		         case 'f': sprintf(mrz,"..-."); break; 		         case 'h': sprintf(mrz,"...."); break; 		         case 'c': sprintf(mrz,"-.-."); break; 		         case 'q': sprintf(mrz,"--.-"); break; 		         case 'y': sprintf(mrz,"-.--"); break; 		         case 'x': sprintf(mrz,"-..-"); break; 		         case '1': sprintf(mrz,".----"); break; 		         case '2': sprintf(mrz,"..---"); break; 		         case '3': sprintf(mrz,"...--"); break; 		         case '4': sprintf(mrz,"....-"); break; 		         case '5': sprintf(mrz,"....."); break; 		         case '6': sprintf(mrz,"-...."); break; 		         case '7': sprintf(mrz,"--..."); break; 		         case '8': sprintf(mrz,"---.."); break; 		         case '9': sprintf(mrz,"----."); break; 		         case '0': sprintf(mrz,"-----"); break; 		         case '.': sprintf(mrz,"......"); break; 		         case ',': sprintf(mrz,".-.-.-"); break; 		         case ':': sprintf(mrz,"---..."); break; 		         case ';': sprintf(mrz,"-.-.-."); break; 		         case '(': sprintf(mrz,"-.--.-"); break; 		         case ')': sprintf(mrz,"-.--.-"); break; 		         case '"': sprintf(mrz,".-..-."); break; 		         case '-': sprintf(mrz,"-....-"); break; 		         case '/': sprintf(mrz,"-..-."); break; 		         case '?': sprintf(mrz,"..--.."); break; 		         case '!': sprintf(mrz,"--..--"); break; 		         case ' ': sprintf(mrz,"-...-"); break; 		         case '@': sprintf(mrz,".--.-."); break; 		         default: sprintf(mrz,""); break; 	        }         cout << "   "<< mrz;     	}     cout << endl;     }  return 0; } | 
Ссылки:
Решение на Java:
| 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 | import java.util.*; import java.lang.*; import java.io.*; class Main { 	public static void main (String[] args) throws java.lang.Exception 	{ 		BufferedReader br = new BufferedReader(new InputStreamReader (System. in) ) ;	 		char rsim; 		Map<String, String> morze = new HashMap<String, String>(); 		morze.put( "a", ".-"); 		morze.put( "b", "-..."); 		morze.put( "w", ".--"); 		morze.put( "g", "--."); 		morze.put( "d", "-.."); 		morze.put( "e", "."); 		morze.put( "v", "...-"); 		morze.put( "z", "--.."); 		morze.put( "i", ".."); 		morze.put( "j", ".---"); 		morze.put( "k", "-.-"); 		morze.put( "l", ".-.."); 		morze.put( "m", "--"); 		morze.put( "n", "-."); 		morze.put( "o", "---"); 		morze.put( "p", ".--."); 		morze.put( "r", ".-."); 		morze.put( "s", "..."); 		morze.put( "t", "-"); 		morze.put( "u", "..-"); 		morze.put( "f", "..-."); 		morze.put( "h", "...."); 		morze.put( "c", "-.-."); 		morze.put( "q", "--.-"); 		morze.put( "y", "-.--"); 		morze.put( "x", "-..-"); 		morze.put( "1", ".----"); 		morze.put( "2", "..---"); 		morze.put( "3", "...--"); 		morze.put( "4", "....-"); 		morze.put( "5", "....."); 		morze.put( "6", "-...."); 		morze.put( "7", "--..."); 		morze.put( "8", "---.."); 		morze.put( "9", "----."); 		morze.put( "0", "-----"); 		morze.put( ".", "......"); 		morze.put( ",", ".-.-.-"); 		morze.put( ":", "---..."); 		morze.put( ";", "-.-.-."); 		morze.put( "(", "-.--.-"); 		morze.put( ")", "-.--.-"); 		morze.put( "\"", ".-..-."); 		morze.put( "-", "-....-"); 		morze.put( "/", "-..-."); 		morze.put( "?", "..--.."); 		morze.put( "!", "--..--"); 		morze.put( " ", "-...-"); 		morze.put( "@", ".--.-."); 		while( (int)(rsim = (char) br.read()) != 65535 )  		{ 			String sim=String.valueOf(Character.toLowerCase(rsim)); 			System.out.printf(" %s",morze.get(sim) ); 		} 	} } | 
