九宮格輸入法


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


這題一定要取余,取余的辦法是,如果我們已經統計出來每次按鍵的個數,我們可以讓按鍵數 (num -1)%strlen(key),key就是對應的按鍵長度。
我們可以解析寫,我們也可以利用scanf讀入空格會結束讀入,然后我們每次單個處理,這樣寫比較簡單,然后代碼也短。
scanf版:
#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]);
    }
    
}

解析版:

#include <iostream>
#include <string>
using namespace std;
string key[10] = {
    "0 ",
    "1,.?!",
    "2ABC",
    "3DEF",
    "4GHI",
    "5JKL",
    "6MNO",
    "7PQRS",
    "8TUV",
    "9WXYZ",
};

int main()
{
    string enter;
    getline(cin, enter);
    int begin = 0, end = 0;
    for (int i = 0; i < enter.length();i++) {
        if (enter[i]==' '||i==enter.length()-1) {
            int cnt = end - begin;
            if (i==enter.length()-1)
                cnt++;
            cnt = (cnt - 1) % key[enter[begin] - '0'].length();
            printf("%c", key[enter[begin] - '0'][cnt]);
            begin = i+1 ;
        }
        end++;
    }
    printf("\n");
    return 0;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM