Входные данные
Обычная ошибка при наборе состоит в том, что вы помещаете ваши руки на клавиатуру на один ряд правее верной позиции. Тогда «Q» печатается как «W«, «J» печатается как «K» и т.д. Ваша задача состоит в расшифровке сообщения, напечатанного таким образом.
Входные данные
Входные данные состоят из нескольких строк текста. Каждая строка может содержать цифры, пробелы, прописные буквы (кроме Q, A, Z) и знаки препинания, показанные выше [кроме обратной кавычки (`)]. Клавиши, обозначенные словами [Tab, BackSp, Control и т.д.], не представлены во входных данных.
Выходные данные
Вы должны заменить каждую букву и знак пунктуации тем, который находится непосредственно слева от него на клавиатуре QWERTY, изображенной выше. Пробелы во входных данных должны повторяться в выходных.
Тесты:
Входные данные | Выходные данные |
O S, GOMR YPFSU/ | I AM FINE TODAY. |
JS;=0— | HAL-9000 |
OY OD S MOVR MOHJY GPT VPFOMH | IT IS A NICE NIGHT FOR CODING |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <string> using namespace std; int main() { string x; string y="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./"; while(getline(cin,x)) { size_t found; for (int i=0; i<x.length(); i++) { if (x[i]==' ') { cout<<" "; } else { found=y.find_first_of(x[i]); cout<<y[found-1]; } } cout<<endl; } return 0; } |
Описание решения:
Для решения поставленной задачи необходимо задать строку, в которой будем хранить все символы с условия, которые необходимо выводить. Так как не указано количество строк входных данных, то будем принимать до конца входного потока.
8 |
while(getline(cin,x)) |
Для каждой строки будем просматривать все символы, и для каждого из них будем использовать следующий алгоритм:
- Если данный символ пробел — то выведем его на экран.
- Иначе, с помощью функции [latex]find[/latex]_[latex]first[/latex]_[latex]of()[/latex] найдем номер вхождения данного символа в проверочном массиве [latex]y[/latex], и выведем предыдущий элемент из этого массива.
- Повторяем пункты 1, 2 до тех пор, пока не дойдем до конца строки [latex]x[/latex]. После этого перейдем на новую строку с помощью команды [latex]endl[/latex].
Условие задачи на сайте e-olymp.com можно найти здесь.
Решение, что зашло на 100%.
Код решения можно проверить здесь.
Расставил правильные отступы. Конечно, это повлияло на оценку.