您的位置:首页 > 其它

Convert QWERTY to Dvorak【The 12th Zhejiang Provincial Collegiate Programming Contest 】

2015-04-25 20:08 471 查看
查看题目

题意:相当于解码。将一种键盘输入的信息转换成另一种键盘的信息。

思路:这道题应该有规律可循,但比赛时实在想不出来,只好一个一个敲出来了。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;

char a[5000][5005];

char change(char a)
{
//printf("%c\n", a);
if(a == '-')
a = '[';
else if(a == '_')
a = '{';
else if(a == '=')
a = ']';
else if(a == '+')
a = '}';
else if(a == 'q')
a = 39;
else if(a == 'Q')
a = 34;
else if(a == 'w')
a = ',';
else if(a == 'W')
a = '<';
else if(a == 'e')
a = '.';
else if(a == 'E')
a = '>';
else if(a == 'r')
a = 'p';
else if(a == 'R')
a = 'P';
else if(a == 't')
a = 'y';
else if(a == 'T')
a = 'Y';
else if(a == 'y')
a = 'f';
else if(a == 'Y')
a = 'F';
else if(a == 'u')
a = 'g';
else if(a == 'U')
a = 'G';
else if(a == 'i')
a = 'c';
else if(a == 'I')
a = 'C';
else if(a == 'o')
a = 'r';
else if(a == 'O')
a = 'R';
else if(a == 'p')
a = 'l';
else if(a == 'P')
a = 'L';
else if(a == '[')
a = '/';
else if(a == '{')
a = '?';
else if(a == ']')
a = '=';
else if(a == '}')
a = '+';
else if(a == 's')
a = 'o';
else if(a == 'S')
a = 'O';
else if(a == 'd')
a = 'e';
else if(a == 'D')
a = 'E';
else if(a == 'f')
a = 'u';
else if(a == 'F')
a = 'U';
else if(a == 'g')
a = 'i';
else if(a == 'G')
a = 'I';
else if(a == 'h')
a = 'd';
else if(a == 'H')
a = 'D';
else if(a == 'j')
a = 'h';
else if(a == 'J')
a = 'H';
else if(a == 'k')
a = 't';
else if(a == 'K')
a = 'T';
else if(a == 'l')
a = 'n';
else if(a == 'L')
a = 'N';
else if(a == ';')
a = 's';
else if(a == ':')
a = 'S';
else if(a == 39)
a = '-';
else if(a == 34)
a = '_';
else if(a == 'z')
a = ';';
else if(a == 'Z')
a = ':';
else if(a == 'x')
a = 'q';
else if(a == 'X')
a = 'Q';
else if(a == 'c')
a = 'j';
else if(a == 'C')
a = 'J';
else if(a == 'v')
a = 'k';
else if(a == 'V')
a = 'K';
else if(a == 'b')
a = 'x';
else if(a == 'B')
a = 'X';
else if(a == 'n')
a = 'b';
else if(a == 'N')
a = 'B';
else if(a == ',')
a = 'w';
else if(a == '<')
a = 'W';
else if(a == '.')
a = 'v';
else if(a == '>')
a = 'V';
else if(a == '/')
a = 'z';
else if(a == '?')
a = 'Z';
return a;
}

int main()
{
int i, k, j, x;
i = 0;
while(gets(a[i]) != NULL){i++;}
for(j = 0; j < i; j++)
{
k = strlen(a[j]);
//printf("%s\n", a);
for(x = 0; x < k; x++)
printf("%c", change(a[j][x]));
printf("\n");
}
return 0;
}


经过改进之后,只是篇幅小了,其实还是一样的,只是将所有可能性存到字符串数组中,然后一一匹配。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;

char a[5000][5005];
char s1[100] = {"-=qwertyuiop[]asdfghjkl;'zxcvbnm,./_+WERTYUIOP{}ASDFGHJKL:ZXCVBNM<>?"};
char s2[100] = {"[]',.pyfgcrl/=aoeuidhtns-;qjkxbmwvz{}<>PYFGCRL?+AOEUIDHTNS:QJKXBMWVZ"};

char change(char a)
{
int i;
int k;
k = strlen(s1);
for(i = 0; i < k; i++)
{
if(s1[i] == a)
return s2[i];
}
char c = '_';   //这里因为"这个符号不会存到字符串里  所以就单独拿出来喽
if(a == 34)
return c;
if(a == 'Q')
return 34;
else return a;
}

int main()
{
int i, k, j, x;
i = 0;
while(gets(a[i]) != NULL)
{
i++;
}
//k = strlen(s1);
for(j = 0; j < i; j++)
{
k = strlen(a[j]);
//printf("%s\n", a);
for(x = 0; x < k; x++)
printf("%c", change(a[j][x]));
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐