Permalänk
Medlem

c++ morse till text HJÄLP!!

Hej!

Jag har (precis som så många andra) fått i uppgift att skriva ett C++ program som översätter text till morse och morse till text.
Text till morse har jag fått fixat men nu när jag ska översätta från morse blir det problem!!
Tanken är att man ska kunna skriva in flera morsebokstäver på samma rad med mellanrum mellan tecknen.
Men om jag skriver flera ord översätter den ingenting. Programmet översätter bara om jag skriver in ett tecken. Har också försökt skriva in
flera tecken på samma rad utan mellanrum men då översätts det heller ingenting. JAG BLIR GALEN!! Om det finns nån där ute som har lust
att hjälpa mig med den sista pusselbiten så hade jag blivit väldigt glad! Och glöm inte att jag är nybörjare. Har bara hållt på i några veckor
(vilket antagligen framgår av koden ). Så här ser koden ut:

#include <iostream>
#include <string>
#include "svenska.h"
using namespace std;

int main()
{
dos_console();

string alfabetet[] = { "a","b","c","d","e","f","g","h","i","j","k",
"l","m","n","o","p","q","r","s","t","u",
"v","w","x","y","z","å","ä","ö" };

string morsekod[] = { ".-","-...","-.-.","-..",".","..-.","--.", "....",
"..",".---","-.-",".-..","--","-.","---",".--.",
"--.-",".-.","...","-","..-","...-",".--","-..-",
"-.--","--..",".--.-",".-.-","---."};

int i; // räknare
string morse; // morse input
string trans2; // översättning till bokstäver

cout << "Skriv in ett morsetecken" << endl;
getline(cin, morse);

// hitta motsvarande indexnr i morsekoden
for ( i = 0 ; i < 29; i++)
{
if ( morse == morsekod[i])
{
trans2 += alfabetet[i];
}

}
cout << trans2 << endl;

system("pause");
return 0;
}

MVH - Johan

Permalänk
Hedersmedlem

Om du får in en lång radda med morse-tecken så går du ju in i for-loopen och jämför hela den raddan med varje tecken i morse-alfabetet. Det kommer ju aldrig stämma. På något sett måste du ta ut varje "bokstav" ur din morse-variabel och jämföra och översätta.

EDIT: Kan hjälpa lite till. Det du vill göra är att leta efter mellanslag i morse-variabeln(som är en sträng) för att ta ut varje bokstav. Du kan själv få ta reda på hur man vet att man nått slutet av en sträng.

Permalänk
Medlem

Hej!

Tack för svar! Jag hade en variabel som plockade ut bokstäverna för sig i "text till morse" versionen. Men när jag försökte mig på samma metod här så blev det galet. Programmet hittar då bara morsebokstäverna e och t eftersom dessa är "." och "-" (gissar jag på) Programmet ser ut så här då:

cout << "Skriv in de morsetecken du önskar översätta." << endl
<< "Glöm inte mellanrum mellan bokstäverna!" << endl;
getline(cin, morse);

// hitta motsvarande indexnr i morsekoden
for ( i = 0 ; i < morse.size(); i++)
{
m = morse[i];
for ( j = 0; j < 29; j++)
{
if ( m == morsekod[j])
{
trans2 += alfabetet[j];
}
}
}
cout << trans2 << endl;

system("pause");
return 0;
}

Permalänk
Hedersmedlem

morse[i] kommer bara plocka ut ett tecken och inte en hel "morsebokstav". Du måste själv hitta rätt index för en morsebokstav(den är ju flera tecken lång, inte som en vanlig bokstav som är ett tecken) och sen plocka ut en substring.

Permalänk
Medlem

Menar du att jag behöver reservera x antal platser för varje morsebokstav? Kan du ge mig ett litet exempel? :S

Permalänk
Medlem
Skrivet av zolost:

Menar du att jag behöver reservera x antal platser för varje morsebokstav? Kan du ge mig ett litet exempel? :S

Hur ser en morse-rad ut innan den ska behandlas? Om du hittar ett mönster så kan du plocka ut varje morse-bokstav för sig.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

gör en temporär sträng som du läser in tills du får ett mellanslag. Sedan jämför du denna strängen. Läs in på nytt till tempsträngen tills nytt mellanslag påträffas.

Permalänk
Medlem

Ok ska se om jag får löst den här jäveln! tack för hjälpen allihop!