posts - 183,  comments - 10,  trackbacks - 0

来自于《编码》

布莱叶盲文用六个点组成,位置分别为 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<charint> encoding)
106 {
107     string tmp;
108     for (string::size_type i = 0; i != sentence.size(); ++i)
109     {
110         map<charint>::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<charint> 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 阅读(349) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理