Source code for submission s1072

fs.cpp

  1. /*
  2.  * File: fs.c
  3.  * Author: cteam048
  4.  *
  5.  * Created on October 19, 2013, 12:45 PM
  6.  */
  7.  
  8. #include <iostream>
  9. #include <string>
  10. #include <stack>
  11.  
  12. using namespace std;
  13. class M {
  14. public:
  15. string code;
  16. int len;
  17.  
  18. M(string fcode, int flen);
  19. };
  20.  
  21. M::M(string fcode1, int flen1) {
  22. code = fcode1;
  23. len = flen1;
  24. }
  25.  
  26. M *CharToMorse(char znak) {
  27. if (znak == 'A') return new M(".-", 2);
  28. if (znak == 'B') return new M("-...", 4);
  29. if (znak == 'C') return new M("-.-.", 4);
  30. if (znak == 'D') return new M("-..", 3);
  31. if (znak == 'E') return new M(".", 1);
  32. if (znak == 'F') return new M("..-.", 4);
  33. if (znak == 'G') return new M("--.", 3);
  34. if (znak == 'H') return new M("....", 4);
  35. if (znak == 'I') return new M("..", 2);
  36. if (znak == 'J') return new M(".---", 4);
  37. if (znak == 'K') return new M("-.-", 3);
  38. if (znak == 'L') return new M(".-..", 4);
  39. if (znak == 'M') return new M("--", 2);
  40. if (znak == 'N') return new M("-.", 2);
  41. if (znak == 'O') return new M("---", 3);
  42. if (znak == 'P') return new M(".--.", 4);
  43. if (znak=='Q') return new M("--.-", 4);
  44. if (znak == 'R') return new M(".-.", 3);
  45. if (znak == 'S') return new M("...", 3);
  46. if (znak == 'T') return new M("-", 1);
  47. if (znak == 'U') return new M("..-", 3);
  48. if (znak == 'V') return new M("...-", 4);
  49. if (znak == 'W') return new M(".--", 3);
  50. if (znak == 'X') return new M("-..-", 4);
  51. if (znak == 'Y') return new M("-.--", 4);
  52. if (znak == 'Z') return new M("--..", 4);
  53. if (znak == '_') return new M("..--", 4);
  54. if (znak == ',') return new M(".-.-", 4);
  55. if (znak == '.') return new M("---.", 4);
  56. if (znak == '?') return new M("----", 4);
  57. return NULL;
  58. };
  59.  
  60. string MorseToChar(string znak) {
  61. if (znak == ".-") return "A";
  62. if (znak == "-...") return "B";
  63. if (znak == "-.-.") return "C";
  64. if (znak == "-..") return "D";
  65. if (znak == ".") return "E";
  66. if (znak == "..-.")return "F";
  67. if (znak == "--.")return "G";
  68. if (znak == "....")return "H";
  69. if (znak == "..")return "I";
  70. if (znak == ".---")return "J";
  71. if (znak == "-.-")return "K";
  72. if (znak == ".-..")return "L";
  73. if (znak == "--")return "M";
  74. if (znak == "-.")return "N";
  75. if (znak == "---")return "O";
  76. if (znak == ".--.")return "P";
  77. if (znak == "--.-")return "Q";
  78. if (znak == ".-.")return "R";
  79. if (znak == "...")return "S";
  80. if (znak == "-")return "T";
  81. if (znak == "..-")return "U";
  82. if (znak == "...-")return "V";
  83. if (znak == ".--")return "W";
  84. if (znak == "-..-")return "X";
  85. if (znak == "-.--")return "Y";
  86. if (znak == "--..")return "Z";
  87. if (znak == "..--")return "_";
  88. if (znak == ".-.-")return ",";
  89. if (znak == "---.")return ".";
  90. if (znak == "----")return "?";
  91. return NULL;
  92. };
  93.  
  94.  
  95. int main() {
  96.  
  97.  
  98. string line;
  99. string morse;
  100. stack<int> cisla;
  101.  
  102.  
  103. while (cin >> line ) {
  104. for (unsigned int i = 0; i < line.size(); i++) {
  105. M *z = CharToMorse(line[i]);
  106. morse += z->code;
  107. cisla.push(z->len);
  108.  
  109. }
  110.  
  111. /**-----*/
  112. string vysledek;
  113. unsigned int c = 0;
  114.  
  115. while (c< morse.size()){
  116. string znak;
  117. int laz = cisla.top();
  118. for (int i = 0; i < laz; ++i) {
  119. znak +=morse[c];
  120. c++;
  121.  
  122. }
  123. vysledek+=MorseToChar(znak);
  124. cisla.pop();
  125.  
  126.  
  127. }
  128.  
  129. cout << vysledek << endl;
  130.  
  131.  
  132.  
  133. }
  134.  
  135. /*********/
  136.  
  137. /*********/
  138.  
  139.  
  140.  
  141. return 0;
  142. }
  143.  
  144.