来自于《编码》
布莱叶盲文用六个点组成,位置分别为 1 2 3 4 5 6
根据六个点是否突起来代表不同的字母,总共有 2 ^ 6 = 64 个情况。
用一个字节表示一个编码,0-5 位分别对应 1-6 个位置。
例如
e:
@.
.@
..
对应的一个字节为
00010001
即为 17
编码表如下,brailleCode.txt:
1 a 1
2 b 3
3 c 9
4 d 25
5 e 17
6 f 11
7 g 27
8 h 19
9 i 10
10 j 26
11 k 5
12 l 7
13 m 13
14 n 29
15 o 21
16 p 15
17 q 31
18 r 23
19 s 14
20 t 30
21 u 37
22 v 39
23 w 58
24 x 45
25 y 61
26 z 53
27 , 2
28 ; 6
29 : 18
30 . 50
31 ! 22
32 ( 54
33 ) 54
34 " 38
35 / 12
36 # 60
37 ' 4
38 - 36
对一句话进行编码:
Rizana Nafeek's story is typical of thousands of young women from Sri Lanka and other poor Asian countries who leave their homes in search of employment and better lives for their families in Saudi Arabia and the glittering Gulf states.
编码后的结果为:
@. .@ @. @. @@ @. @@ @. @@
@@ @. .@ .. .@ .. .@ .. @.
@. .. @@ .. @. .. @. .. ..
@. @. @. .. .@ .@ .@ @. @.
.@ .@ .. .. @. @. @@ .@ @@
.. .. @. @. @. @. @. @. @.
@@ .@ .@ .@ @@ @@ .@ @@
.@ @. @. @@ .@ @. @. ..
@@ .. @. @. @@ @. .. ..
@. @. @. @@ .@ @. @. @.
.. @. .@ @. @@ @@ .@ ..
.. @. @. .. @. .. @. @@
.@ @. @@ @@ .@ @. @@ @@
@. .. .@ .@ @. .@ @. .@
@. .. @. .. @. @. .. @@
@. @. @@ @@ .@ @. @@ @. @@
.@ .. .@ @@ @@ .@ .. .@ .@
@. @@ @. .. .@ @. @. .. @.
@@ @. @. @@ .@ @. .@
@. @@ .@ .. @. @@ @.
.. @. @. @. @. @. ..
@. @. @@ @. @. @. @@ @@
@. .. .@ .. .. .. .@ .@
@. .. @. @. .. .. @. ..
@. .@ @. @. @. @@ @. @. @.
.@ @@ @@ .@ @@ @. .@ .@ @@
@. @. .. .. @. @. @. @. @.
@. .@ .@ @. @@ @@ @. @.
.. @. @. .. .@ .. .@ ..
.. @. .. .. @. .. @. @@
@@ .@ @. .@ @. .@ .@ @. @.
.@ @@ @@ @. .@ @. @@ @@ .@
@. @. @. .. .. @. .@ .. @.
@. @. @. @. @. .@ @. @.
@. .@ .. @. .@ @@ @@ .@
@. .. .. @@ .. @. .. ..
.@ @. @. @. @@ @. .@ .@
@. @@ @@ .@ .. .@ @. @.
.. @. .. @. @. .. @. ..
@@ .@ @. @. @. @@ @. @.
.@ @. .@ .. @@ .. @@ .@
@. @. .. .. @. .. .. @.
@@ @. @@ @@ @. @. @@ @@ @.
@. .@ .. @. @. .@ .@ .. .@
.. .. @. @. @. @. @@ @. ..
@@ .@ @. @@ @@ @. @. .@
.@ @@ .. .@ .@ @. .@ @@
@. @. .. @. .. .. .. @.
.@ @. @. @. .@ @. @. .@
@@ .@ @@ @. @. @. .@ @.
@. .. @. @. .. @@ .. @.
@@ @. @. .@ @. @. .@ @.
@. .@ @@ @@ @@ .@ @. @@
.. @. @. @. .. .. .. @.
@@ @. @@ .@ @. .@ @. .@ .@
@. .. .. @. @. @. .@ @. @.
.. .. @. .. @. .. .. @. ..
@@ .@ @. @. @@ .@ @. @.
.@ @. .. .. .@ @. .. @@
@. @. .. @@ .. .. .. @.
@. @. .@ @. @. @@ @@ .@
.. @. @. .. .. .@ .@ @@
.. .. .. .. .. @. .. @.
@. @. @@ @. .@ .@ .@ @. @.
@@ .@ @@ @. @. @@ @@ .@ @@
.. .. .. @. .. @. @. .. @.
.@ @@ @@ @@ @. @. @@ .@
@. .@ @@ @@ .. @. @. @.
.. @. .. .. @@ @. .. @.
.@ @. .@ @. .@ ..
@@ .. @@ .@ @. @@
@. .. @. .. @. .@
布莱叶盲文是用于盲人读取的,所谓的解码即是利用触觉获取所蕴含的信息。这种通过触觉的解码不宜用计算机来实现。
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4 #include <map>
5 #include <cctype>
6 using namespace std;
7
8 bool test(char c, int i)
9 {
10 return (c & (1 << i)) != 0;
11 }
12
13 void display(const string& bc)
14 {
15 for (int i = 0; i < bc.size() / 10 + 1; ++i)
16 {
17 for (string::size_type j = i * 10; j < (i * 10 + 10 < bc.size() ? i * 10 + 10 : bc.size()); ++j)
18 {
19 if (bc[j] == ' ')
20 {
21 cout << '\t';
22 }
23 else
24 {
25 if (test(bc[j], 0))
26 {
27 cout << '@';
28 }
29 else
30 {
31 cout << '.';
32 }
33 if (test(bc[j], 3))
34 {
35 cout << '@';
36 }
37 else
38 {
39 cout << '.';
40 }
41 cout << ' ';
42 }
43 }
44 cout << endl;
45 for (string::size_type j = i * 10; j < (i * 10 + 10 < bc.size() ? i * 10 + 10 : bc.size()); ++j)
46 {
47 if (bc[j] == ' ')
48 {
49 cout << '\t';
50 }
51 else
52 {
53 if (test(bc[j], 1))
54 {
55 cout << '@';
56 }
57 else
58 {
59 cout << '.';
60 }
61 if (test(bc[j], 4))
62 {
63 cout << '@';
64 }
65 else
66 {
67 cout << '.';
68 }
69 cout << ' ';
70 }
71 }
72 cout << endl;
73 for (string::size_type j = i * 10; j < (i * 10 + 10 < bc.size() ? i * 10 + 10 : bc.size()); ++j)
74 {
75 if (bc[j] == ' ')
76 {
77 cout << '\t';
78 }
79 else
80 {
81 if (test(bc[j], 2))
82 {
83 cout << '@';
84 }
85 else
86 {
87 cout << '.';
88 }
89 if (test(bc[j], 5))
90 {
91 cout << '@';
92 }
93 else
94 {
95 cout << '.';
96 }
97 cout << ' ';
98 }
99 }
100 cout << endl;
101 cout << endl;
102 }
103 }
104
105 string encode(const string& sentence, const map<char, int> encoding)
106 {
107 string tmp;
108 for (string::size_type i = 0; i != sentence.size(); ++i)
109 {
110 map<char, int>::const_iterator cit = encoding.find(tolower(sentence[i]));
111 if (cit != encoding.end())
112 {
113 tmp += static_cast<char>(cit->second);
114 }
115 else
116 {
117 tmp += ' ';
118 }
119 }
120 return tmp;
121 }
122
123 int main()
124 {
125 ifstream fin("brailleCode.txt");
126 if (!fin)
127 {
128 cerr << "File error!" << endl;
129 return 1;
130 }
131 map<char, int> encoding;
132 char a;
133 int b;
134 while (fin >> a >> b)
135 {
136 encoding[a] = b;
137 }
138 string sentence, bc;
139 while (getline(cin, sentence))
140 {
141 bc = encode(sentence, encoding);
142 //cout << bc << endl;
143 display(bc);
144 }
145 return 0;
146 }
posted on 2011-11-15 18:20
unixfy 阅读(373)
评论(0) 编辑 收藏 引用