17
1 Binary Search Trees II Morse Code

1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

Embed Size (px)

Citation preview

Page 1: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

1

Binary Search Trees II

Morse Code

Page 2: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

2

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

Page 3: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

3

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;

}

Page 4: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

4

Initial Program Running

Page 5: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

5

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/Downlo

ads/2011_03_07_Morse_Code_BST/

Page 6: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

6

Morse_Code_Pair.h

#pragma once

#include <iostream>

#include <string>

class Morse_Code_Pair

{

public:

std::string symbol; // A Morse code symbol.

char value; // 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; }

};

Page 7: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

7

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);

Page 8: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

8

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;

}

Page 9: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

9

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;

}

Page 10: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

10

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;

}

Page 11: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

11

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);

}

Page 12: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

12

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');

Page 13: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

13

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');

}

Page 14: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

14

main.cpp

int main()

{

build_map();

morse_map.display(cout);

Page 15: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

15

The Morse_Pair BST

Page 16: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

16

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;

Page 17: 1 Binary Search Trees II Morse Code. 2 An Application: Morse Code Table Let's create a BST to translate ASCII characters into Morse Code symbols. Use

17

Program in Action

End of Presentation