题目:

A common typing error is to place the hands on the keyboard one row to the right of the correct position. So ‘Q’ is typed as ‘W’ and ‘J’ is typed as ‘K’ and so on. You are to decode a message typed in this manner.

Input

Input consists of several lines of text. Each line may contain digits, spaces, upper case letters (except Q, A, Z), or punctuation shown above [except back-quote (‘)]. Keys labelled with words [Tab, BackSp, Control, etc.] are not represented in the input.

Output

You are to replace each letter or punction symbol by the one immediately to its left on the ‘QWERTY’ keyboard shown above. Spaces in the input should be echoed in the output.

Sample Input

O S, GOMR YPFSU/

Sample Output

I AM FINE TODAY.


此题的关键就在于如何确定给定字符在键盘上的左边一个字符是什么。可以用30个if但是太烦了。这里涉及到一个常量数组。将键盘上的字符按照行顺序写进一个数组,这样用数组的下标可以访问左边的字符。

char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";

但是这给循环搜索造成了麻烦。字符数组的最后一个一定是空字符,用这个判断数组结束。

for (i=1;s[i];i++);  //这里不需要考虑i=0,这种情况被题设排除

于是顺便将条件一起解决了

for (i=1;s[i] && c == s[i];i++);

最后输出,如果i不是s数组的最后一个,就直接替换为s[i-1],否则就输出c(就是空格了)

if(s[i])  putchar(s[i-1]);

else   putchar(c);

照例,本题使用逐个读取。

while ((c = getchar()) != EOF){…………}  //考虑到可能有空格的出现

解:

#include <stdio.h>

int main()
{
int c,i;
char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
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://vjudge.net/problem/UVA-10082(UVa太慢)

最新文章

  1. zookeeper dubbo 问题解决录
  2. 《你必须知道的.NET》读书笔记二:小OO有大原则
  3. 【代码笔记】iOS-检测手机翻转
  4. ubuntu /etc/network/interfaces 中配置虚拟链路
  5. AC日记——codevs 1086 栈 (卡特兰数)
  6. [转]easyui常用控件及样式API中文收藏
  7. 【JavaScript】微信适配的Head
  8. CSS、CSS2和CSS3选择器总结(全部选择器种类及其优先级)
  9. 将矩阵转化为LibSvm需要的格式
  10. 【Android - 框架】之Glide的使用
  11. CI分支kohana在线文档
  12. dom4j解析XML的CURD操作
  13. unicode &amp; utf-8
  14. CodeForces-4C Registration system
  15. Day08 (黑客成长日记) 命名空间和作用域
  16. 使用idea创建一个maven工程
  17. jquery的clone方法应用于textarea和select的bug修复不能copy值,clone id重复的解决
  18. jsp标签之jsp:setProperty用法
  19. Android 编程下通过 zipalign 对 APK 文件进行优化
  20. linux清理Java环境

热门文章

  1. Eclipse的XML编辑器解决方案
  2. Vue-cli4 唤醒摄像头扫描二维码
  3. MyBaits学习03(ResultMap和分页)
  4. Java通过SSLEngine与NIO实现HTTPS访问
  5. 绕WAF常见思路整理(一)
  6. Echarts 图表位置调整
  7. comm tools
  8. 题解 [NOIP2017 提高组]宝藏
  9. maven打包war,导入本地jar包
  10. C++ 中的User a, User b=a 和User a, User b, b=a的区别