Advertisement
Guest User

Untitled

a guest
Sep 9th, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.38 KB | None | 0 0
  1. //Program som översätter text till morse och tvärt om.
  2. //Klarar endast gemener, a-z.
  3.  
  4. #include <iostream>
  5. #include <string>
  6. using namespace std;
  7.  
  8.     /*
  9.     Fält som används vid själva översättningen.
  10.     Är uppbyggda så att ett givet index i den ena motsvarar rätt tecken/sträng i den andra.
  11.     */
  12.     char bokstav[] = "abcdefghijklmnopqrstuvwxyz";
  13.     string morse[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
  14.                      "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
  15.  
  16. //Skriver ut översättningsalternativen. Är en egen funktion för att förhindra grötig kod i main().
  17. void instruktion()
  18. {
  19.     cout << "\n\nMORSE TRANSLATOR: \n\n"
  20.          << "Vad vill du \x94vers\x84tta?\n"
  21.          << "(1) Text till morse\n"
  22.          << "(2) Morse till text\n\n";
  23. }
  24.  
  25. /*
  26. Här väljer användaren om han/hon vill fortsätta översätta eller avsluta programmet.
  27. Returnerar falskt då programmet ska avslutas, vilket untyttjas i main().
  28. */
  29. bool mer()
  30. {
  31.     char val;
  32.  
  33.     cout << "Vill du \x94vers\x84tta n\x86got mer? (j/n)\n";
  34.     cin >> val;
  35.     if(val == 'n')
  36.     {
  37.         cout << "\n\nHa en bra dag!\n\n";
  38.         return false;
  39.     }
  40.     else
  41.     {
  42.         instruktion();
  43.         return true;
  44.     }
  45.  
  46. }
  47.  
  48. /*
  49. Sköter översättningen från text till morse.
  50. Läser in en textsträng via cin för att sedan gå igenom den tecken för tecken och jämföra detta mot bokstav[].
  51. Om ett matchande tecken hittas används index för att plocka ut motsvarande morsetecken.
  52. Rätt morsetecken placeras i strängen trans som returneras i slutet.
  53. */
  54. string tillMorse()
  55. {
  56.     string text, trans;
  57.     char x;
  58.  
  59.     cout << "\nSkriv in din text, avsluta med ENTER:\n";
  60.     cin.ignore();
  61.     getline(cin, text);
  62.  
  63.  
  64.     for(int i=0 ; i < text.size() ; i++)
  65.     {
  66.         x = text[i];                    //Plockar ut varje enskilt tecken ur text.
  67.  
  68.         for(int j=0 ; j < 26 ; j++)     //Går igenom bokstav[] för att se ifall x matchar någon bokstav.
  69.         {
  70.             if(bokstav[j] == x)         //Om en matchning hittas läggs motsvarande morsekod till trans.
  71.             {
  72.                 trans += morse[j];
  73.                 trans += " ";
  74.             }
  75.         }
  76.     }
  77.     return trans;                       //Den fullständiga översättningen returneras.
  78. }
  79.  
  80. /*
  81. Används för att översätta morse till text.
  82. Läser in en sträng av morsetecken, skilda med mellanslag.
  83. Letar upp varje enskilt morsetecken och stoppar det i temp.
  84. temp jämförs med morse[] för att se ifall det är ett giltigt tecken.
  85. Om så är fallet används index för att hitta motsvarande bokstav i bokstav[].
  86. */
  87. string franMorse()
  88. {
  89.     string text, trans, temp;
  90.     int y = 0, z = 0;
  91.  
  92.     cout << "\nSkriv in din morsekod, avsluta med ENTER:\n";
  93.     cin.ignore();
  94.     getline(cin, text);
  95.  
  96.  
  97.     while(z != -1)//
  98.     {
  99.         z = text.find_first_of(" ", y); //hittar det första mellanslaget, med början från index y.
  100.         temp = text.substr(y, (z-y));//plockar ut z-y antal tecken, med början från y, och stoppar i temp.
  101.  
  102.         for(int j=0 ; j < 26 ; j++)//går igenom morse[] för att se ifall temp matchar något morsetecken.
  103.         {
  104.             if(temp == morse[j])//om en matchning hittas läggs motsvarande bokstav till i trans.
  105.             {
  106.                 trans += bokstav[j];
  107.             }
  108.         }
  109.         y = z + 1;                          //z pekar nu på ett mellanslag, genom att sätta y = z + 1 hoppar vi över
  110.     }                                       //mellanslaget och nästa varv i loopen börjar på ett nytt morsetecken.
  111.     return trans;                           //Den fullständiga översättningen returneras.
  112. }
  113.  
  114.  
  115. /*
  116. Består av en loop som tar reda på vad användaren vill göra.
  117. Beroende på vilket alternativ användaren väljer delegerar main() uppgiften till rätt funktion.
  118. */
  119. int main()
  120. {
  121.     char val;
  122.  
  123.     instruktion();
  124.  
  125.     while(cin >> val)
  126.     {
  127.         if(val == '1')                                  //översättning från text till morse.
  128.         {
  129.             cout << "\n" << tillMorse() << "\n\n\n";
  130.             if(mer() == false)                          //ifall användaren vill avsluta programmet görs det här.
  131.             {                                           //I annat fall fortsätter programmet en runda till.
  132.                 break;
  133.             }
  134.            
  135.         }
  136.         else if(val == '2')                             //översättning från morse till text.
  137.         {
  138.            
  139.             cout << "\n" << franMorse() << "\n\n\n";
  140.             if(mer() == false)                          //ifall användaren vill avsluta programmet görs det här.
  141.             {                                           //I annat fall fortsätter programmet en runda till.
  142.                 break;
  143.             }
  144.         }
  145.         else                                            //skrivs ut ifall användaren anger något annat än 1 eller 2.
  146.         {
  147.             cout << val << " - ogiltigt alternativ, f\x94rs\x94k igen!";
  148.         }
  149.         cout << "\n";
  150.     }
  151.  
  152.     return 0;
  153.  
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement