紫书刷题进行中,题解系列点这里
例题3-2 UVA10082 WERTYU(13行AC代码)
思路分析
根据题意可不考虑QAZ
和无法显示的字符(TAB,Enter等),用string存放键盘键位,使用getline按行读入,非空则遍历该行字符串,若遇到空格,直接输出,否则,在string中查找相应键位,输出前一位字符。
- 注意使用getline需要额外输出换行符
- 若用getchar按字符读入则无需多余输出换行符
AC代码(C++11)
#include<bits/stdc++.h>
using namespace std;
string keyboard = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./", s;
int main() {
while(getline(cin, s) && !s.empty()) {
for (char ch : s) {
if (ch == ' ') printf(" ");
else printf("%c", keyboard[keyboard.find(ch)-1]);
}
printf("\n"); // 换行记录
}
return 0;
}