Source code for submission s846

morseCode.cpp

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string.h>
  4. #include <cstring>
  5. #include<string>
  6. using namespace std;
  7.  
  8. char * Library( char letter )
  9. {
  10. //cout << "IN library" << endl;
  11. char * morseCode;
  12. //delete morsecode
  13. switch ( letter )
  14. {
  15. case 'A': morseCode = new char [3]; strcpy(morseCode, ".-");break;
  16. case 'B': morseCode = new char [5]; strcpy(morseCode, "-...");break;
  17. case 'C': morseCode = new char [5]; strcpy(morseCode, "-.-.");break;
  18. case 'D': morseCode = new char [4]; strcpy(morseCode, "-..");break;
  19. case 'E': morseCode = new char [2]; strcpy(morseCode, ".");break;
  20. case 'F': morseCode = new char [5]; strcpy(morseCode, "..-.");break;
  21. case 'G': morseCode = new char [4]; strcpy(morseCode, "--.");break;
  22. case 'H': morseCode = new char [5]; strcpy(morseCode, "....");break;
  23. case 'I': morseCode = new char [3]; strcpy(morseCode, "..");break;
  24. case 'J': morseCode = new char [5]; strcpy(morseCode, ".---");break;
  25. case 'K': morseCode = new char [4]; strcpy(morseCode, "-.-");break;
  26. case 'L': morseCode = new char [5]; strcpy(morseCode, ".-..");break;
  27. case 'M': morseCode = new char [3]; strcpy(morseCode, "--");break;
  28. case 'N': morseCode = new char [3]; strcpy(morseCode, "-.");break;
  29. case 'O': morseCode = new char [4]; strcpy(morseCode, "---");break;
  30. case 'P': morseCode = new char [5]; strcpy(morseCode, ".--.");break;
  31. case 'Q': morseCode = new char [5]; strcpy(morseCode, "--.-");break;
  32. case 'R': morseCode = new char [4]; strcpy(morseCode, ".-.");break;
  33. case 'S': morseCode = new char [4]; strcpy(morseCode, "...");break;
  34. case 'T': morseCode = new char [2]; strcpy(morseCode, "-");break;
  35. case 'U': morseCode = new char [4]; strcpy(morseCode, "..-");break;
  36. case 'V': morseCode = new char [5]; strcpy(morseCode, "...-");break;
  37. case 'W': morseCode = new char [4]; strcpy(morseCode, ".--");break;
  38. case 'X': morseCode = new char [5]; strcpy(morseCode, "-..-");break;
  39. case 'Y': morseCode = new char [5]; strcpy(morseCode, "-.--");break;
  40. case 'Z': morseCode = new char [5]; strcpy(morseCode, "--..");break;
  41. case '_': morseCode = new char [5]; strcpy(morseCode, "..--");break;
  42. case ',': morseCode = new char [5]; strcpy(morseCode, ".-.-");break;
  43. case '.': morseCode = new char [5]; strcpy(morseCode, "---.");break;
  44. case '?': morseCode = new char [5]; strcpy(morseCode, "----");break;
  45. }
  46. //cout << "Getting out of library" << endl;
  47. return morseCode;
  48. }
  49.  
  50. char Library2 (char * decoded) {
  51. if (!strcmp(decoded, ".-")) return 'A';
  52. else if (!strcmp(decoded, "-...")) return 'B';
  53. else if (!strcmp(decoded, "-.-.")) return 'C';
  54. else if (!strcmp(decoded, "-..")) return 'D';
  55. else if (!strcmp(decoded, ".")) return 'E';
  56. else if (!strcmp(decoded, "..-.")) return 'F';
  57. else if (!strcmp(decoded, "--.")) return 'G';
  58. else if (!strcmp(decoded, "....")) return 'H';
  59. else if (!strcmp(decoded, "..")) return 'I';
  60. else if (!strcmp(decoded, ".---")) return 'J';
  61. else if (!strcmp(decoded, "-.-")) return 'K';
  62. else if (!strcmp(decoded, ".-..")) return 'L';
  63. else if (!strcmp(decoded, "--")) return 'M';
  64. else if (!strcmp(decoded, "-.")) return 'N';
  65. else if (!strcmp(decoded, "---")) return 'O';
  66. else if (!strcmp(decoded, ".--.")) return 'P';
  67. else if (!strcmp(decoded, "--.-")) return 'Q';
  68. else if (!strcmp(decoded, ".-.")) return 'R';
  69. else if (!strcmp(decoded, "...")) return 'S';
  70. else if (!strcmp(decoded, "-")) return 'T';
  71. else if (!strcmp(decoded, "..-")) return 'U';
  72. else if (!strcmp(decoded, "...-")) return 'V';
  73. else if (!strcmp(decoded, ".--")) return 'W';
  74. else if (!strcmp(decoded, "-..-")) return 'X';
  75. else if (!strcmp(decoded, "-.--")) return 'Y';
  76. else if (!strcmp(decoded, "--..")) return 'Z';
  77. else if (!strcmp(decoded, "..--")) return '_';
  78. else if (!strcmp(decoded, ".-.-")) return ',';
  79. else if (!strcmp(decoded, "---.")) return '.';
  80. else if (!strcmp(decoded, "----")) return '?';
  81. return '!';
  82. }
  83.  
  84.  
  85. string breakDown( string inputString )
  86. {
  87.  
  88. char * morseArray = new char[4000];
  89. int * numberArray = new int [1000];
  90. const char * letter = inputString.c_str();
  91. int letterRead = 0;
  92. int morseInUse = 0;
  93.  
  94. while ( letter[letterRead] != '\0' )
  95. {
  96. //cout << "pismeno> " << letter[letterRead] << endl;
  97. char * morseCode;
  98. morseCode = Library( letter[letterRead] );
  99. int morseLength = strlen( morseCode );
  100. numberArray[letterRead++] = morseLength;
  101. strncpy( morseArray + morseInUse, morseCode, morseLength);
  102. morseInUse += morseLength;
  103. //cout << morseCode << endl;
  104. delete [] morseCode;
  105. }
  106. //Ukonceno cteni
  107. char * decoded = new char [5];
  108. string result = "";
  109. int readSymbol = 0;
  110. for (int i = letterRead - 1; i >= 0; i--) {
  111. //cout << "NA> " << numberArray[i] << endl;
  112. strncpy (decoded, morseArray + readSymbol, numberArray[i]);
  113. decoded[numberArray[i]] = '\0';
  114. //cout << "decoded> " << decoded << endl;
  115. readSymbol += numberArray[i];
  116. char dec =Library2(decoded);
  117. //cout << "char> " << dec << endl;
  118. result += dec;
  119. }
  120.  
  121. delete [] decoded;
  122. delete [] morseArray;
  123. delete [] numberArray;
  124. return result;
  125. }
  126.  
  127.  
  128.  
  129. int main ()
  130. {
  131. string str = "";
  132. while (getline(cin,str)) {
  133. cout << breakDown(str) << endl;
  134. }
  135. return 0 ;
  136. }
  137.