九宮格輸入法-字符串處理方法


之前做過九宮格輸入法的題目

搜了一下網上的解法沒找到高效的解法

寫一個相對高效的解法

先放上原題

假設有九宮格輸入法鍵盤布局如下:

 [ 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  

 

首先直接以數字讀入肯定會爆 題中給出了總長度不超過500

一種很直接的思路是每次讀一個字符,遇到空格做一個統計,然后根據統計的個數輸出結果。

但既然每組輸入都是相同的數字,那用字符串處理起來可能會更方便

這里放上我的算法

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 const string keys[10] = {
 6     "0 ",
 7     "1,.?!","2ABC","3DEF",
 8     "4GHI","5JKL","6MNO",
 9     "7PQRS","8TUV","9WXYZ",
10 };
11 
12 int main() {
13     string str;        
14     while (cin >> str) {        // 從流中讀取輸入信息
15         string key = keys[str[0] - '0'];    // 按鍵
16         int counts = (str.size() - 1) % key.size();    // 按下次數
17         cout << key[counts];    // 輸出
18     }
19     return 0;
20 }

 

可以說是鑽了題目的空子。


免責聲明!

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



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