<html>

<head><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- MyFirstUnitAd -->
<ins class="adsbygoogle"
     style="display:inline-block;width:970px;height:250px"
     data-ad-client="ca-pub-5778386704669218"
     data-ad-slot="1503492166"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>CFGReader</title>
</head>

<body>



<p align="left"><span lang="en-ca"><font size="6" color="#FF0000"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Japanese encoding </b></font></span></p>

<div align="left">
  <pre><b><font color="#ff0000" size="5">A. <span lang="en-ca">First</span> Edition</font></b></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>This is a quite simple demo of what I read from book &lt;battle of wits&gt; which described the code-breaking war in </b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>world war II. </b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">B</span>.<span lang="en-ca"><a name="problem"></a>The problem</span></font></b></pre>
</div>
<p ALIGN="LEFT"><span lang="en-ca"><font size="2"><b>This encoding is basically 
simple at my opinion. As they encode vowels and consonants separately. For 
vowels, </b></font></span></p>
<p ALIGN="LEFT"><span lang="en-ca"><font size="2"><b>they use a 6x6 Vigenere 
Tableau. In order to simplify the question, I choose the same key for both 
vowels and </b></font></span></p>
<p ALIGN="LEFT"><span lang="en-ca"><font size="2"><b>consonants. I think 
Japanese encoding technique is quite primitive compared with most European 
countries. You</b></font></span></p>
<p ALIGN="LEFT"><span lang="en-ca"><font size="2"><b>see, this kind of encoding 
exposes the word pattern with vowels and consonants.</b></font></span></p>
<div align="left">
  <b><font color="#ff0000" size="5"><span lang="en-ca"><a name="explain"></a>C</span>.<span lang="en-ca">The
  </span></font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>idea of 
  program</b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  <span lang="en-ca"><font size="2"><b>&nbsp; A E I O U Y<br>
  I C D E F A B<br>
  N B C D E F A<br>
  S A B C D E F<br>
  A A B C D E F<br>
  N B C D E F A<br>
  E E F A B C D<br>
  MIFAOUYLDYJXFIFBWXEZIWEEF<br>
  CANYOUUNDERSTANDWHATIMEAN<br>
  Press any key to continue</b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  <span lang="en-ca"><font size="2"><b>See this is the 6x6 Vigenere Tableau for 
  vowels. The &quot;key&quot; is &quot;INSANE&quot; and the original text is </b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  <span lang="en-ca"><font size="2"><b>&quot;can you understand what I mean?&quot; and the 
  encoded string is &quot;MIFAOUYLDYJXFIFBWXEZIWEEF&quot;.</b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  <span lang="en-ca"><font size="2"><b>The last line demonstrate the my decoder 
  works correctly.<br>
　</b></font></span></div>
<div align="left">
  <pre><b><font color="#ff0000" size="5">D.<span lang="en-ca"><a name="Method"></a>The </span>major functions</font></b></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">E</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>Further improvement</b></font></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>When I read more about the book.</b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">F</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>File listing</b></font></span></pre>
</div>
<div align="left">
  <pre><font size="3"><b>1<span lang="en-ca">. JapanCode.cpp (main)</span></b></font></pre>
  <pre>　</pre>
</div>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: JapanCode.cpp</b></font></span></pre>
</div>
<pre>#include &lt;iostream&gt;

using namespace std;

const int VowelNumber=6;
enum Letter
{A,E,I,O,U,Y,B,C,D,F,G,H,J,K,L,M,N,P,Q,R,S,T,V,W,X,Z};

int vowelIndex[VowelNumber]={A,E,I,O,U,Y};
char index[26]=
{
	'A','E','I','O','U','Y',
	'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Z'
};

class JapanCode
{
private:
	char vowelVig[VowelNumber][VowelNumber];	
	char vowelCode[VowelNumber];	
	int modulo(int number, int mod);
	int vCount;//vowel count
	int cCount;//consonant count
	bool setCode(const char* codeStr);

public:
	JapanCode(char* defaultCode=&quot;insane&quot;);
	void translate(char* text, bool encoding=true);
	void printTable();
};


int main()
{
	char buffer[256];
	JapanCode J;
	strcpy(buffer, &quot;can you understand what I mean?&quot;);
	J.printTable();
	J.translate(buffer);
	cout&lt;&lt;buffer&lt;&lt;endl;
	J.translate(buffer, false);
	cout&lt;&lt;buffer&lt;&lt;endl;

	return 0;
}

void JapanCode::translate(char* text, bool encoding)
{
	char* src=text;
	char* tgt=text;
	char ch;
	int offset=0, vIndex=0, cIndex=0;
	vCount=cCount=0;
	while (*src!='\0')
	{
		ch=toupper(*src);
		if (ch&gt;='A'&amp;&amp;ch&lt;='Z')//if it is a letter
		{		
			for (int i=0; i&lt;26; i++)
			{
				if (ch==index[i])
				{				
					break;//find out the index
				}
			}
			if (i&lt;VowelNumber)//if it is vowel
			{		
				offset=vCount%VowelNumber;//position
				offset=(vowelCode[offset]-'A')%VowelNumber;//
				if (encoding)
				{		
					offset=(offset+i)%VowelNumber;				
				}
				else
				{
					offset=i-offset;
					if (offset&lt;0)
					{
						offset+=VowelNumber;
					}									
				}
				*tgt=index[offset];
				vCount++;
				tgt++;
			}
			else//if it is consonant
			{
				i-=VowelNumber;//the index of consonant
				offset=cCount%VowelNumber;
				offset=(vowelCode[offset]-'A')%20;
				if (encoding)
				{		
					offset=(offset+i)%20;					
				}
				else
				{
					offset=i-offset;
					if (offset&lt;0)
					{
						offset+=20;
					}
				}
				*tgt=index[offset+VowelNumber];
				tgt++;
				cCount++;
			}
		}//if it is letter	
		src++;
	}
	*tgt='\0';
}

int JapanCode::modulo(int number, int mod)
{
	int result=number%mod;
	return result&lt;0?(mod+result):result;
}

bool JapanCode::setCode(const char* codeStr)
{
	if (strlen(codeStr)!=VowelNumber)
	{		
		return false;
	}
	else
	{
		for (int i=0; i&lt;VowelNumber; i++)
		{
			vowelCode[i]=toupper(codeStr[i]);
		}
	}
	return true;
}

JapanCode::JapanCode(char* defaultCode)
{
	int offset=0;
	if (!setCode(defaultCode))
	{
		cout&lt;&lt;&quot;The required code length is &quot;&lt;&lt;VowelNumber&lt;&lt;endl;
		exit(1);
	}
	for (int i=0; i&lt;VowelNumber; i++)
	{
		offset=(vowelCode[i]-'A')%VowelNumber;
		offset=modulo(offset, VowelNumber);
		
		for (int j=0; j&lt;VowelNumber; j++)
		{
			vowelVig[i][j]='A'+vowelIndex[(j+offset)%VowelNumber];
		}
	}
}

void JapanCode::printTable()
{
	for (int i=0; i&lt;VowelNumber; i++)
	{
		cout&lt;&lt;&quot;\t&quot;&lt;&lt;index[i];
	}
	cout&lt;&lt;&quot;\n&quot;;
	for (i=0; i&lt;VowelNumber; i++)
	{
		cout&lt;&lt;vowelCode[i]&lt;&lt;&quot;\t&quot;;
		for (int j=0; j&lt;VowelNumber; j++)
		{
			cout&lt;&lt;vowelVig[i][j]&lt;&lt;&quot;\t&quot;;
		}
		cout&lt;&lt;&quot;\n&quot;;
	}
}




	</pre>
<pre>
</pre>
<pre></pre>
<pre><font color="#0000FF"><b><span lang="en-ca">The input is something like following:</span></b></font></pre>
<pre><font color="#0000FF"><b>Here is the <a name="result"></a>result:</b></font></pre>

<pre></pre>

<pre></pre>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                   
&nbsp;&nbsp;&nbsp; <a href="game24.htm">                  







                       <img src="picture/back.gif" style="border: medium none" alt="back.gif (341 bytes)" width="32" height="35"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<a href="index.htm">
<img src="picture/up.gif" style="border: medium none" alt="up.gif (335 bytes)" width="35" height="32"></a>       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                         
<img src="picture/next.gif" style="border: medium none" alt="next.gif (337 bytes)" width="32" height="35">          


</p>

</body>

</html>