-
Notifications
You must be signed in to change notification settings - Fork 3
/
letter.cpp
71 lines (66 loc) · 1.24 KB
/
letter.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "letter.h"
const char *codes[] = {
".-", // 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
"-----", // 0
".----", // 1
"..---", // 2
"...--", // 3
"....-", // 4
".....", // 5
"-....", // 6
"--...", // 7
"---..", // 8
"----.", // 9
""
};
bool strEq(char *a, char *b) {
int i = 0;
while (a[i] != 0 && b[i] != 0) {
if (a[i] == b[i]) i++;
else return false;
}
return a[i] == 0 && b[i] == 0;
}
Letter::Letter() {
int t = 6;
while (t--) bits[t] = 0;
index = 0;
}
char Letter::decode() {
for (int i = 0; i < 37; i++) {
if (strEq(codes[i], bits)) {
if (i == 36) return 0;
return (i < 26 ? 'A'+i : '0'+i-26);
}
}
return '?';
}
void Letter::append(char c) {
if (index >= 5) return;
bits[index++] = c;
}