Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <string>
- #include <fstream>
- #include <iostream>
- using namespace std;
- struct node {
- /* vrchol stromu */
- char letter; /* pismeno vo vrchole alebo '?' */
- node * dot; /* kod predlzeny o bodku */
- node * dash; /* kod predlzeny o ciarku */
- };
- void addCode(char letter, string code, node *root) {
- /* Do stromu s koreňom root pridá kód uložený v reťazci code
- * ktorý zodpovedá písmenu letter. */
- node *current;
- current = root;
- for (int i = 0; i < code.length(); i++){
- if (code[i] == '.') {
- if( current->dot != NULL) {
- current = current->dot;
- } else {
- current->dot = new node;
- current = current->dot;
- current->dot = NULL;
- current->dash = NULL;
- }
- }
- if (code[i] == '-') {
- if( current->dash != NULL) {
- current = current->dash;
- } else {
- current->dash = new node;
- current = current->dash;
- current->dot = NULL;
- current->dash = NULL;
- }
- }
- }
- current->letter = letter;
- }
- char findLetter(string message, int &pos, node *root) {
- /* V strome s koreňom root nájde písmeno zodpovedajúce kódu,
- * ktorý v texte message začína na pozícii pos.
- * Toto písmeno vráti ako výsledok funkcie.
- * Ak takéto písmeno neexistuje, vráti znak '?'.
- * Pozíciu pos posunie na najbližšiu medzeru za kódom alebo za
- * posledné písmeno textu, ak za kódom je už koniec textu. */
- string code;
- node *current;
- int pom;
- char temp;
- int counter = 0;
- while ((message[pos] = ' ') && ( pos < message.length() - 1)){
- counter++;
- pos++;
- temp = message[pos];
- if (counter == 2){return ' ';}
- }
- while ((temp != ' ') && ( pos < message.length() - 1)){
- code += temp;
- pos++;
- temp = message[pos];
- }
- for (int i=0; i < code.length(); i++){
- if (code[i] == '.') {
- if (current->dot != NULL){
- current= current->dot;
- } else {
- return '?';
- }
- }
- if (code[i] == '-') {
- if (current->dash != NULL){
- current= current->dash;
- } else {
- return '?';
- }
- }
- }
- if (pos == message.length() -1){pos++;};
- return current->letter;
- }
- int main(int argc, char** argv) {
- node *root = new node;
- root->dash = NULL;
- root->dot = NULL;
- int pos = 0;
- string tempstr;
- char letter;
- string code;
- string zadanie;
- string vysledok;
- ifstream vstup;
- vstup.open("morse.txt");
- if(vstup.is_open()){
- while (vstup.good()){
- vstup>>letter;
- vstup>>code;
- addCode(letter, code, root);
- }
- }
- getline(cin, zadanie);
- while (pos < zadanie.length()) {
- vysledok += findLetter(zadanie, pos, root);
- cout << vysledok << endl;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment