UVa10082 WERTYU
题目链接:UVa10082
题目描述
输入格式

输出格式

题目翻译
把手放在键盘上,稍不注意就会往右错一位。这样,输入Q会变成输入W,输入J会变成输入K等。键盘如图所示。 输入一个错位后敲出来的字符串(所有字母均大写),输出打字员本来想打出的矩阵输入保证合法,即一定是错位之后的字符串。例如输入中不会出现大写字母A。

多行输入 每行包括数字,空格,大写字母(除了Q,A,Z)或者是标点符号(除了“’”(L右面第2个)),标有单词的按键,如Tab,BackSp,Control等等不会出现。
你需要用每个字母或者符号左面的(在如图给出的QWERTY类型的键盘)那个按键内容替换他,输入的空格不作处理,依然输出空格。
题目分析
本题关键在于如何进行输入输出变换。一种易想到的方法是使用if或switch语句进行特判,如if(c=‘W’)putchar(‘Q’),但这样处理的情况过多,步骤过于繁琐,故此方法不在考虑范围内。
一种既简单又高效的方法是打表,即使用常量数组,用数组中的每一个每一个值代表键盘上的一个键位,则其下标减一对应的值即为原想要打出的字符,打表也是一种在算法竞赛中常用的节约时间手段。
注意:C++中反斜线\与单引号’需要转义,即写成\\与\’。
Code
#include<cstdio> using namespace std; int c,i; char s[]={
"`-=QWERTYUIOP[]\\ASDFGHJKL;\'ZXCVBNM,./'"}; //定义常量数组时无需指明大小,编译器会计算 int main() {
while((c=getchar())!=EOF) {
for(i=1;s[i] && s[i]!=c;i++);//找错位之后的字符在常量表中的位置 if(s[i]) putchar(s[i-1]);//如果找到,则输出它的前一个字符 else putchar(c); } return 0; }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/19086.html