UVA10082 WERTYU 题解

爱吃糖的徐菜菜 2022-01-22 17:54:27

题意翻译

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

多行输入 每行包括数字,空格,大写字母(除了Q,A,Z)或者是标点符号(除了“'”(L右面第2个)),标有单词的按键,如Tab,BackSp,Control等等不会出现

你需要用每个字母或者符号左面的(在如图给出的QWERTY类型的键盘)那个按键内容替换他,输入的空格不作处理,依然输出空格

输入输出样例

输入 #1

O S, GOMR YPFSU/

输出 #1

I AM FINE TODAY.

思路

类似[UVA401回文词](UVA401 回文词 Palindromes 题解-CSDN社区),都是建立一个映射关系,这个题和回文词不同的是,这个题涉及到大量符号,没有明显规律(代码会很复杂),所以我们可以用遍历的方法,建立一个按照键盘顺序的字符串,每个字符都遍历查找一遍,输出这个字符的前一个字符

代码

#include <stdio.h>
int main() {
    // 注意:'\'需要转义
     char str[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
     char c;
     int i;
     while ((c = fgetc(stdin)) != EOF) {
         // ' '和'\n'需要原样输出
         if (c == ' ') {
            printf(" "); 
            continue;
        } 
        if (c == '\n') {
            printf("\n");
            continue;
        }
        // 查找
        for (i = 0; str[i] != '\0'; i++) {
             if (str[i] == c) {
                 printf("%c",str[i-1]);
                 break;    
             }
         }
     }
     return 0;
} 

参考紫书答案

#include <stdio.h>
int main() {
     char str[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
     char c;
     int i;
     while ((c = fgetc(stdin)) != EOF) {
         for (i = 0; str[i] != '\0'; i++) {
             if (str[i] == c) {
                 printf("%c",str[i-1]);
                 break;    
             }
         }
         // 没有找到字符,其实就是空格和回车
         if (str[i] == '\0') {
         printf("%c", c);
         }
     }
     return 0;
} 
...全文
96 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,633

社区成员

发帖
与我相关
我的任务
社区描述
欢迎大家来到抱团内卷学习社区,在这里大家可以分享自己的学习笔记,求职心得,一起记录彼此的成长历程。社区群号:94108843,WX公众号:【兴趣使然的草帽路飞】
社区管理员
  • 路  飞
  • 一百个Chocolate
  • 灰小猿
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

最怕你一生碌碌无为,还安慰自己平凡可贵!

努力提高自己的知识储备,助力每一位冲刺大厂的小伙伴!

祝大家前程似锦,offer连连!

注意:每个月活跃积分最高的小伙伴,可以获得社区管理员权限哦!

试试用AI创作助手写篇文章吧