本文主要是介绍P2 九宫格输入法 (15 分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
假设有九宫格输入法键盘布局如下:
[ 1,.?! ] [ 2ABC ] [ 3DEF ][ 4GHI ] [ 5JKL ] [ 6MNO ][ 7PQRS ] [ 8TUV ] [ 9WXYZ ][ 0空 ]
注意: 中括号[ ]仅为了表示键盘的分隔,不是输入字符。每个中括号中,位于首位的数字字符即是键盘的按键,按一下即可输入该数字字符。多次按同一个键,则输入的字符依次循环轮流,例如按两次3,则输入D;按5次7,则输入S;按6次2,则输入A。按键0的输入组合是0和空格字符,即按两次0输入空格。
你需要对于给定的按键组合,给出该组合对应的文本。
输入格式:
输入在一行中给出数个字符的按键组合(例如 999 表示按3次9),每个字符的按键组合之间用空格间隔,最后一个输入法组合之后以换行结束。输入数据至少包括一个字符的按键组合,且输入总长度不超过500个字符。
输出格式:
在一行中输出该按键组合对应的文本。
输入样例:
22 5555 22 666 00 88 888 7777 4444 666 44
输出样例:
ALAN TURING
题解
注意有可能超过每个按键的总和数,所以要取个模,否则第二个测试点过不去。
最开始我以为是每个数字间不止一个空格,所以改成了现在这个代码。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
string mp[] = {"0 ","1,.?!","2ABC","3DEF","4GHI","5JKL","6MNO","7PQRS","8TUV","9WXYZ"};
int main(){string input;getline(cin, input);for(int i = 0; i < input.size();){int j = i;while(j < input.size() && input[i] == input[j]) j++;int len = (j - i - 1) % mp[input[i]-'0'].size();cout<<mp[input[i]-'0'][len];while(j < input.size() && input[j] == ' ') j++;i = j;}return 0;
}
版本2
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
string mp[] = {"0 ","1,.?!","2ABC","3DEF","4GHI","5JKL","6MNO","7PQRS","8TUV","9WXYZ"};
int main(){vector<string> v;char c;string str;while(cin>>str){c = getchar();v.push_back(str);if(c == '\n') break;}for(auto s: v){int len = (s.size() - 1) % mp[s[0]-'0'].size();cout<<mp[s[0]-'0'][len];}return 0;
}
这篇关于P2 九宫格输入法 (15 分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!