Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Program som översätter text till morse och tvärt om.
- //Klarar endast gemener, a-z.
- #include <iostream>
- #include <string>
- using namespace std;
- /*
- Fält som används vid själva översättningen.
- Är uppbyggda så att ett givet index i den ena motsvarar rätt tecken/sträng i den andra.
- */
- char bokstav[] = "abcdefghijklmnopqrstuvwxyz";
- string morse[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
- "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
- //Skriver ut översättningsalternativen. Är en egen funktion för att förhindra grötig kod i main().
- void instruktion()
- {
- cout << "\n\nMORSE TRANSLATOR: \n\n"
- << "Vad vill du \x94vers\x84tta?\n"
- << "(1) Text till morse\n"
- << "(2) Morse till text\n\n";
- }
- /*
- Här väljer användaren om han/hon vill fortsätta översätta eller avsluta programmet.
- Returnerar falskt då programmet ska avslutas, vilket untyttjas i main().
- */
- bool mer()
- {
- char val;
- cout << "Vill du \x94vers\x84tta n\x86got mer? (j/n)\n";
- cin >> val;
- if(val == 'n')
- {
- cout << "\n\nHa en bra dag!\n\n";
- return false;
- }
- else
- {
- instruktion();
- return true;
- }
- }
- /*
- Sköter översättningen från text till morse.
- 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[].
- Om ett matchande tecken hittas används index för att plocka ut motsvarande morsetecken.
- Rätt morsetecken placeras i strängen trans som returneras i slutet.
- */
- string tillMorse()
- {
- string text, trans;
- char x;
- cout << "\nSkriv in din text, avsluta med ENTER:\n";
- cin.ignore();
- getline(cin, text);
- for(int i=0 ; i < text.size() ; i++)
- {
- x = text[i]; //Plockar ut varje enskilt tecken ur text.
- for(int j=0 ; j < 26 ; j++) //Går igenom bokstav[] för att se ifall x matchar någon bokstav.
- {
- if(bokstav[j] == x) //Om en matchning hittas läggs motsvarande morsekod till trans.
- {
- trans += morse[j];
- trans += " ";
- }
- }
- }
- return trans; //Den fullständiga översättningen returneras.
- }
- /*
- Används för att översätta morse till text.
- Läser in en sträng av morsetecken, skilda med mellanslag.
- Letar upp varje enskilt morsetecken och stoppar det i temp.
- temp jämförs med morse[] för att se ifall det är ett giltigt tecken.
- Om så är fallet används index för att hitta motsvarande bokstav i bokstav[].
- */
- string franMorse()
- {
- string text, trans, temp;
- int y = 0, z = 0;
- cout << "\nSkriv in din morsekod, avsluta med ENTER:\n";
- cin.ignore();
- getline(cin, text);
- while(z != -1)//
- {
- z = text.find_first_of(" ", y); //hittar det första mellanslaget, med början från index y.
- temp = text.substr(y, (z-y));//plockar ut z-y antal tecken, med början från y, och stoppar i temp.
- for(int j=0 ; j < 26 ; j++)//går igenom morse[] för att se ifall temp matchar något morsetecken.
- {
- if(temp == morse[j])//om en matchning hittas läggs motsvarande bokstav till i trans.
- {
- trans += bokstav[j];
- }
- }
- y = z + 1; //z pekar nu på ett mellanslag, genom att sätta y = z + 1 hoppar vi över
- } //mellanslaget och nästa varv i loopen börjar på ett nytt morsetecken.
- return trans; //Den fullständiga översättningen returneras.
- }
- /*
- Består av en loop som tar reda på vad användaren vill göra.
- Beroende på vilket alternativ användaren väljer delegerar main() uppgiften till rätt funktion.
- */
- int main()
- {
- char val;
- instruktion();
- while(cin >> val)
- {
- if(val == '1') //översättning från text till morse.
- {
- cout << "\n" << tillMorse() << "\n\n\n";
- if(mer() == false) //ifall användaren vill avsluta programmet görs det här.
- { //I annat fall fortsätter programmet en runda till.
- break;
- }
- }
- else if(val == '2') //översättning från morse till text.
- {
- cout << "\n" << franMorse() << "\n\n\n";
- if(mer() == false) //ifall användaren vill avsluta programmet görs det här.
- { //I annat fall fortsätter programmet en runda till.
- break;
- }
- }
- else //skrivs ut ifall användaren anger något annat än 1 eller 2.
- {
- cout << val << " - ogiltigt alternativ, f\x94rs\x94k igen!";
- }
- cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement