九宫格按键输入 --- 华为od刷题

题目描述

[九宫格]按键输入,输出显示内容,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入”/”或者其他字符,则循环中断。

字符对应关系如图:

要求输入一串按键,输出屏幕显示。

输入描述

输入范围为数字 0~9 和字符’#’、’/’,输出屏幕显示,例如,

在数字模式下,输入 1234,显示 1234

在英文模式下,输入 1234,显示,adg

输出描述

#用于切换模式,默认是数字模式,执行#后切换为英文模式;

/表示延迟,例如在英文模式下,输入 22/222,显示为 bc;

英文模式下,多次按同一键,例如输入 22222,显示为 b;

用例

输入123#222235/56
输出123adjjm

参考

【华为OD机试 】 九宫格按键输入(C++ Java JavaScript Python 四种语言实现)

C++

#include<iostream>
#include<vector>
#include<algorithm>
#include<string.h>
#include<map>
using namespace std;
 
int main() {
    string input_str;
    cin >> input_str;
    
    // 九宫格枚举信息
    map<char, string> char_map;
    char_map['0'] = " ";
    char_map['1'] = ",.";
    char_map['2'] = "abc";
    char_map['3'] = "def";
    char_map['4'] = "ghi";
    char_map['5'] = "jkl";
    char_map['6'] = "mno";
    char_map['7'] = "pqrs";
    char_map['8'] = "tuv";
    char_map['9'] = "wxyz";
    
    string res;
    // 默认是数字模式
    int mode = 0;
    
    for (int i = 0; i < input_str.size(); i++) {
        char c = input_str[i];
        if (isdigit(c)) { // 如果是数字
            if (mode == 0) { // 如果是数字模式,直接加入结果
                res.push_back(c);
            } else if (mode == 1) { // 如果是字母模式
                int j = i;
                string tempstr = char_map[c];
                while (j < input_str.size() && input_str[j] == c) { // 统计连续出现的数字个数
                    j++;
                }
                int index = (j - i - 1) % tempstr.size(); // 计算对应的字母下标
                res.push_back(tempstr[index]); // 加入结果
                i = j - 1; // 跳过已经处理的数字
            }
        } else if (c == '#') { // 如果是切换模式符号
            mode = (mode + 1) % 2; // 切换模式
        } else if (c == '/') { // 如果是延迟符号,不做处理
            // 延迟,不做处理
        } else { // 如果是其他字符,直接退出循环
            break;
        }
    }
    cout << res << endl; // 输出结果
    return 0;
}
#华为机试,emo了##华为od#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 12:10
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务