简单编码。速度。送分

来源:百度知道 编辑:UC知道 时间:2024/06/21 22:09:53
下面是编码原则:(1) 如果访问到字符A,W,F就转化成I;(2) 如果访问到字符C,M,S就分别转化成L,o,v;(3) 如果访问到字符D,P,G,B就转化成e;(4) 如果访问到字符L,X就分别转化成Y,u;(5) 其他字符均保持不变。(6) 遇到END就结束!

用c++编个小程序。谢谢

你的这个问题,如果是为了效率的话,只有一种方案,定义一个一维的长度为128的索引表,可以像这样:
static const _g_ch1vConvTbl[] = {
0x00, 0x01, 0x02, // ASCII
……
'I'/* 'A', 0x40 */, 'e'/* 'B', 0x41 */,
'L'/* 'C', 0x42 */, 'e'/* 'D', 0x43 */,
'E'/* 'E' */, 'I'/* 'F' */, ……, 'I'/* 'W' */
……
0x7F // 因为ASCII不可能超过128
}
也就是说,用输入字符作为数组的下标,然后从数组中直接读出对应的值,其实代码可以这样写:

while( bLoop )
{
char ch = GetChar();// 从数据流中获得一个字符,这是你的事情了
char chConv = _g_ch1vConvTbl[ch]; // 转换
// ……
// 干活,至于怎么干,那是你的事情了。
// ……
if( ('E' == ch) ||
('N' == ch) ||
('D' == ch) )
{
char* psz = SaveChar(ch); // 保存可疑的字符,并返回保存后的字符串。
if( 0 == strcmp(psz, "END") ) // 如果是"END"的话,就要退出循环
{
bLoop = fa