同題:UVa 10082 – WERTYU
打字時一個常見的錯誤就是沒有把手放在正確位置,而是偏右邊一個位置。所以會發生 Q 被打成 W,J 被打成 K 等等的情況。你的任務就是要把打錯的字修正回來。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入包含許多列,每列可能包含有數字,空白字元,大寫英文字母(Q、A、Z除外),標點符號(`除外)。 | 對每一列中的每個字元,請輸出在鍵盤 (如上圖) 上其左邊一個位置的字元。但是輸入中的空白字元,輸出時亦請輸出空白字元。 |
O S, GOMR YPFSU/ URD. ,U [JPMR MI,NRT OD 8346333 | I AM FINE TODAY. YES, MY PHONE NUMBER IS 7235222 |
解題思路
可以使用 Map 來建檔,需要注意的是 \ 和 ‘ 都屬於特殊字元需要用另一個寫法,\ 要寫成 \\,’ 要寫成 \’。
範例程式碼-ZeroJudge C054: WERTYU
#include <iostream>
#include <map>
using namespace std;
int main() {
map<char, char>MAP;
MAP['`'] = '`';
MAP['1'] = '`';
MAP['2'] = '1';
MAP['3'] = '2';
MAP['4'] = '3';
MAP['5'] = '4';
MAP['6'] = '5';
MAP['7'] = '6';
MAP['8'] = '7';
MAP['9'] = '8';
MAP['0'] = '9';
MAP['-'] = '0';
MAP['='] = '-';
MAP['Q'] = 'Q';
MAP['W'] = 'Q';
MAP['E'] = 'W';
MAP['R'] = 'E';
MAP['T'] = 'R';
MAP['Y'] = 'T';
MAP['U'] = 'Y';
MAP['I'] = 'U';
MAP['O'] = 'I';
MAP['P'] = 'O';
MAP['['] = 'P';
MAP[']'] = '[';
MAP['\\'] = ']';
MAP['A'] = 'A';
MAP['S'] = 'A';
MAP['D'] = 'S';
MAP['F'] = 'D';
MAP['G'] = 'F';
MAP['H'] = 'G';
MAP['J'] = 'H';
MAP['K'] = 'J';
MAP['L'] = 'K';
MAP[';'] = 'L';
MAP['\''] = ';';
MAP['Z'] = 'Z';
MAP['X'] = 'Z';
MAP['C'] = 'X';
MAP['V'] = 'C';
MAP['B'] = 'V';
MAP['N'] = 'B';
MAP['M'] = 'N';
MAP[','] = 'M';
MAP['.'] = ',';
MAP['/'] = '.';
MAP[' '] = ' ';
string str;
while (getline(cin, str))
{
for (int i = 0; i<str.length(); i++)
{
cout << MAP[str[i]];
}
cout << "\n";
}
}
//ZeroJudge C054
//Dr. SeanXD