Binary Search Trees II Morse Code 1 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use genBST1.h template. Will create a new class to be the template parameter. New empty C++ project ASCII_to_Morse_Code 2 Initial main.cpp #include <iostream> using namespace std; int main() { cout << "Enter an ASCII string to be translated into Morse Code\n"; char buffer[1000]; cin.getline(buffer, 1000); cout << "You entered:\n"; cout << buffer; cin.get(); cin.get(); return 0; } 3 Initial Program Running 4 Class Morse_Code_Pair Add class Morse_Code_Pair Each object will specify the Morse Code symbol for one ASCII character. We will build a BST of these objects. Use the BST to translate ASCII into Morse Code. Copy source files from: http://www.cse.usf.edu/~turnerr/Data_Structures/Downloads/ 2011_03_07_Morse_Code_BST/ 5 Morse_Code_Pair.h #pragma once #include <iostream> #include <string> class Morse_Code_Pair { public: std::string symbol; char value; // A Morse code symbol. // The letter or digit represented // by this symbol public: // Default constructor Morse_Code_Pair(); // Normal constructor Morse_Code_Pair(std::string symbol_, char value_); // Accessor functions std::string get_symbol() const {return symbol; } char get_value() const {return value; } }; 6 Morse_Code_Pair.h // Less than operator bool operator<(const Morse_Code_Pair& lhs, const Morse_Code_Pair& rhs); // Equals operator bool operator==(const Morse_Code_Pair& lhs, const Morse_Code_Pair& rhs); // Output operator std::ostream& operator<<(std::ostream& out, const Morse_Code_Pair& s); 7 Morse_Code_Pair.cpp #include "Morse_Code_Pair.h" using namespace std; // Default constructor Morse_Code_Pair::Morse_Code_Pair() : symbol("", ' ') {} // Normal constructor Morse_Code_Pair::Morse_Code_Pair(string symbol_, char value_) : symbol(symbol_), value(value_) {} // Less then operator bool operator< (const Morse_Code_Pair& lhs, const Morse_Code_Pair& rhs) { char c_lhs = lhs.get_value(); char c_rhs = rhs.get_value(); return c_lhs < c_rhs; } 8 Morse_Code_Pair.cpp // Equals operator bool operator==(const Morse_Code_Pair& lhs, const Morse_Code_Pair& rhs) { char c_lhs = lhs.get_value(); char c_rhs = rhs.get_value(); return c_lhs == c_rhs; } 9 Morse_Code_Pair.cpp ostream& operator<<(ostream& out, const Morse_Code_Pair& s) { string symbol_string = s.get_symbol(); for (size_t i = 0; i < symbol_string.length(); ++i) { if (symbol_string[i] == '_') { symbol_string[i] = '-'; } } out << s.get_value() << " " << symbol_string; return out; } 10 main.cpp #include <iostream> #include "genBST1.h" #include "Morse_Code_Pair.h" using namespace std; // Conservative upper bound on length of a single Morse code symbol const int MAX_SYMBOL_LEN = 10; // Binary Search Tree to map Morse code symbols to characters BST<Morse_Code_Pair> morse_map; void add_symbol_to_map(string symbol, char value) { Morse_Code_Pair sym(symbol, value); morse_map.insert(sym); } 11 build_map In main.cpp: void build_map() { add_symbol_to_map("....", 'H'); add_symbol_to_map("___..", '8'); add_symbol_to_map("._.", 'R'); add_symbol_to_map("...__", '3'); add_symbol_to_map("_._.", 'C'); add_symbol_to_map("__", 'M'); add_symbol_to_map("..._", 'V'); add_symbol_to_map(".____", '1'); add_symbol_to_map(".....", '5'); add_symbol_to_map("._", 'A'); add_symbol_to_map(".", 'E'); add_symbol_to_map(".___", 'J'); add_symbol_to_map("___", 'O'); add_symbol_to_map("_", 'T'); add_symbol_to_map("_.._", 'X'); add_symbol_to_map(".__", 'W'); 12 build_map add_symbol_to_map("_____", '0'); add_symbol_to_map("..___", '2'); add_symbol_to_map("...._", '4'); add_symbol_to_map("_....", '6'); add_symbol_to_map("____.", '9'); add_symbol_to_map("_...", 'B'); add_symbol_to_map("_..", 'D'); add_symbol_to_map(".._.", 'F'); add_symbol_to_map("..", 'I'); add_symbol_to_map("_._", 'K'); add_symbol_to_map(".__.", 'P'); add_symbol_to_map("_.__", 'Y'); add_symbol_to_map("__...", '7'); add_symbol_to_map("__.", 'G'); add_symbol_to_map("._..", 'L'); add_symbol_to_map("_.", 'N'); add_symbol_to_map("__._", 'Q'); add_symbol_to_map("...", 'S'); add_symbol_to_map(".._", 'U'); add_symbol_to_map("__..", 'Z'); } 13 main.cpp int main() { build_map(); morse_map.display(cout); 14 The Morse_Pair BST 15 main.cpp Add at end of main.cpp: cout << "\n\nHere is the string in Morse Code:\n"; for (int i = 0; i < (int) strlen(buffer); ++i) { char c = toupper(buffer[i]); Morse_Code_Pair* search_target = new Morse_Code_Pair("", c); Morse_Code_Pair* mcp = morse_map.search(*search_target); if (mcp == 0) { cout << " "; } else { string next_symbol = mcp->get_symbol(); cout << next_symbol << " "; } } cout << endl; 16 Program in Action End of Presentation 17