题目描述
A common typing error is to place the hands on the keyboard one row to the right of the correct position. So “Q” is typed as “W” and “J” is typed as “K” and so on. You are to decode a message typed in this manner.
一个常见的打字错误是将手放在键盘上正确位置的右边一行。Q被输入为W,J被输入为K,以此类推。你将解码以这种方式输入的消息。
输入描述
Input consists of several lines of text. Each line may contain digits, spaces, upper case letters (except Q, A, Z), or punctuation shown above [except back-quote (`)]. Keys labelled with words [Tab, BackSp, Control, etc.] are not represented in the input.
输入由几行文本组成。每行可以包含数字、空格、大写字母(Q、A、Z除外)或上面所示的标点符号[反引号(’)除外]。用单词[Tab, BackSp, Control, etc]标记的键不在输入中表示。
输出描述
You are to replace each letter or punctuation symbol by the one immediately to its left on the QWERTY keyboard shown above. Spaces in the input should be echoed in the output.
您必须用上面所示的QWERTY键盘上紧邻其左边的一个字母或标点符号来替换每个字母或标点符号。输入中的空格应该在输出中回显。
输入样例:
O S, GOMR YPFSU/
输出样例:
I AM FINE TODAY.
思路
用string保存键盘输入序列,用find()方法找到该字符前一个字符的位置即为应输出字符
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
s = "1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int pos;
string str1,str2;
getline(cin,str1);
//cin>>str1; 无法读入空格
for(int i=0;i<str1.length();i++){
if(str1[i]==' '){
str2 += str1[i];
}
else{
pos = s.find(str1[i]);
str2 += s[pos-1];
}
}
cout<<str2<<endl;
return 0;
}
Tip
- getline( char *buffer, streamsize num, char delim )
buffer 进行读入操作的输入流
num 存储读入的内容
delim 终结符(默认换行符\n
)string s; getline(cin,s,' '); //输入字符串s,遇到空格终止读入到s
- 如果读入和输出整个字符串只能用cin和cout
- str.find(str2,pos),从str的pos号位开始区配str2,返回其第一次出现的位置,pos默认为0