码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ 3878--解题报告

时间:2015-05-27 20:34:34      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

 

题目相关:
  3878相关链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5526
  Edward 打字员习惯于QWERTY键盘布局来打字(该键盘Caps Lock失效), 一天他需要把所打的文字从QWERTY键盘布局转为Dvorak键盘布局, 求转换程序.
  两者的键盘布局如图所对比:
  技术分享

思路分析:
  该题是个简单的模拟题, 重要的是理解题意.
  我们所要做的是把两键盘的字符做个一一对应的映射.当然我们可以做个技巧, 不同键做映射, 相同的键可以忽略不做.

AC代码:

#include <cstdio>
#include <cstring>
#include <map>
#include <cassert>

std::map<char, char> kbmap;

void init() {
    
    const char *key1 = "-=_+qwertyuiop[]\\QWERTYUIOP{}|asdfghjkl;‘ASDFGHJKL:\"zxcvbnm,./ZXCVBNM<>?";
    const char *key2 = "[]{}‘,.pyfgcrl/=\\\"<>PYFGCRL?+|aoeuidhtns-AOEUIDHTNS_;qjkxbmwvz:QJKXBMWVZ";
    size_t key1_len = strlen(key1);
    size_t key2_len = strlen(key2);
    assert(key1_len == key2_len);
    
    for ( size_t i = 0; i < key1_len; i++ ) {
        kbmap[key1[i]] = key2[i];
    }
    
}

void convert(char *buffer) {
    int len = strlen(buffer);
    for ( int i = 0; i < len; i++ ) {
        char ch = buffer[i];
        if ( kbmap.find(ch) != kbmap.end() ) {
            buffer[i] = kbmap[ch];
        }
    }
}


int main()
{

    init();
    
    char buffer[1024 * 2];

    while ( fgets(buffer, sizeof(buffer), stdin) != NULL ) {
        convert(buffer);
        printf("%s", buffer);
    }

    return 0;
}

 

ZOJ 3878--解题报告

标签:

原文地址:http://www.cnblogs.com/mumuxinfei/p/4534074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!