7-9 九宫格输入法 (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<string>
using namespace std;
int main(){
int a0=1,a1=1,a2=1,a3=1,a4=1,a5=1,a6=1,a7=1,a8=1,a9=1;
bool b0=1,b1=1,b2=1,b3=1,b4=1,b5=1,b6=1,b7=1,b8=1,b9=1;
string s;
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]=='0'&&s[i+1]=='0'){
b0=0;
a0++;
}
if(s[i]=='1'&&s[i+1]=='1'){
b1=0;
a1++;
}
if(s[i]=='2'&&s[i+1]=='2'){
b2=0;
a2++;
}
if(s[i]=='3'&&s[i+1]=='3'){
b3=0;
a3++;
}
if(s[i]=='4'&&s[i+1]=='4'){
b4=0;
a4++;
}
if(s[i]=='5'&&s[i+1]=='5'){
b5=0;
a5++;
}if(s[i]=='6'&&s[i+1]=='6'){
b6=0;
a6++;
}if(s[i]=='7'&&s[i+1]=='7'){
b7=0;
a7++;
}if(s[i]=='8'&&s[i+1]=='8'){
b8=0;
a8++;
}if(s[i]=='9'&&s[i+1]=='9'){
b9=0;
a9++;
}
if(s[i]==' '||i==s.size()-1){
if(!b0){
if(a0%2==1){
cout<<'0';
}
if(a0%2==0){
cout<<' ';
}
}
if(!b1){
if(a1%5==1){
cout<<'1';
}
if(a1%5==2){
cout<<',';
}
if(a1%5==3){
cout<<'.';
}
if(a1%5==4){
cout<<'?';
}
if(a1%5==5){
cout<<'!';
}
}
if(!b2){
if(a2%4==1){
cout<<'2';
}
if(a2%4==2){
cout<<'A';
}
if(a2%4==3){
cout<<'B';
}
if(a2%4==0){
cout<<'C';
}
}
if(!b3){
if(a3%4==1){
cout<<'3';
}
if(a3%4==2){
cout<<'D';
}
if(a3%4==3){
cout<<'E';
}
if(a3%4==0){
cout<<'F';
}
}
if(!b4){
if(a4%4==1){
cout<<'4';
}
if(a4%4==2){
cout<<'G';
}
if(a4%4==3){
cout<<'H';
}
if(a4%4==0){
cout<<'I';
}
}
if(!b5){
if(a5%4==1){
cout<<'5';
}
if(a5%4==2){
cout<<'J';
}
if(a5%4==3){
cout<<'K';
}
if(a5%4==0){
cout<<'L';
}
}
if(!b6){
if(a6%4==1){
cout<<'6';
}
if(a6%4==2){
cout<<'M';
}
if(a6%4==3){
cout<<'N';
}
if(a6%4==0){
cout<<'O';
}
}
if(!b7){
if(a7%5==1){
cout<<'7';
}
if(a7%5==2){
cout<<'P';
}
if(a7%5==3){
cout<<'Q';
}
if(a7%5==4){
cout<<'R';
}
if(a7%5==0){
cout<<'S';
}
}
if(!b8){
if(a8%4==1){
cout<<'8';
}
if(a8%4==2){
cout<<'T';
}
if(a8%4==3){
cout<<'U';
}
if(a8%4==0){
cout<<'V';
}
}
if(!b9){
if(a9%5==1){
cout<<'9';
}
if(a9%5==2){
cout<<'W';
}
if(a9%5==3){
cout<<'X';
}
if(a9%5==4){
cout<<'Y';
}
if(a9%5==0){
cout<<'Z';
}
}
a0=1,a1=1,a2=1,a3=1,a4=1,a5=1,a6=1,a7=1,a8=1,a9=1;
b0=1,b1=1,b2=1,b3=1,b4=1,b5=1,b6=1,b7=1,b8=1,b9=1;
}
}
}
此代码仅作为反面教材
我没有想到用二维数组的方法去储存这个九宫格的信息
以下参考代码
#include<stdio.h>
#include<string.h>
char b[10][10]={"0 ","1,.?!","2ABC","3DEF","4GHI","5JKL","6MNO","7PQRS","8TUV","9WXYZ"};
int main()
{
char a[505];
while(scanf("%s",a)!=EOF)
{
int m=strlen(a)%strlen(b[a[0]-'0']);
if(m==0)
m=strlen(b[a[0]-'0']);
printf("%c",b[a[0]-'0'][m-1]);
}
}
这篇博客探讨了7-9九宫格输入法的原理,提供了输入和输出格式的详细说明,并通过示例解释了如何根据按键组合转换为对应文本。作者反思了自己的编程思路,分享了一段未能解决问题的代码,并指出需要改进的地方,如使用二维数组来存储九宫格信息。

6800

被折叠的 条评论
为什么被折叠?



