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

以前作過九宮格輸入法的題目ios

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

寫一個相對高效的解法佈局

先放上原題spa

假設有九宮格輸入法鍵盤佈局以下:

 [ 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  

 

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

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

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

這裏放上個人算法字符串

 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 }

 

能夠說是鑽了題目的空子。字符串處理

相關文章
相關標籤/搜索