10082. WERTYU

 

Клавиатура расклада QWERTY имеет вид:

 

 

Когда печатался текст, то вместо каждого нужного символа печатался тот, который расположен на клавиатуре справа. То есть вместо Q печатался W, вместо W печатался E и так далее. Такая ошибка может произойти при слепом печатании, если пальцы расположить на одну позицию правее требуемой. Необходимо восстановить текст, который следовало напечатать.

 

Вход. Текст состоит из нескольких строк и содержит в себе цифры, заглавные буквы (кроме Q, A, Z), знаки пунктуации [кроме обратной кавычки (`)], пробелы.

 

Выход. Восстановить текст. Известно, что пробел при печати не заменялся другим символом.

 

Пример входа

O S, GOMR YPFSU/

 

Пример выхода

I AM FINE TODAY.

 

 

РЕШЕНИЕ

обработка текста

 

Анализ алгоритма

Для каждого напечатанного символа поставим в соответствие символ, который следовало печатать. Читая посимвольно текст, заменяем каждый символ требуемым.

 

Реализация алгоритма

Занесем в символьный массив letter раскладку клавиатуры. В переменной m типа map будем хранить отображение печатаемых символов в реальные. То есть если m[‘a’] = ‘b’, то каждый входной символ ‘a’ должен быть преобразован в ‘b’.

 

const char letter[47] = {'`','1','2','3','4','5','6','7','8','9','0','-','=',

                        'Q','W','E','R','T','Y','U','I','O','P','[',']','\\',

                         'A','S','D','F','G','H','J','K','L',';','\'',

                         'Z','X','C','V','B','N','M',',','.','/' };

map<char,char> m;

 

Заполним отображение m данными, поставив в соответствие символу letter[i + 1] символ letter[i]. Пробелу поставим в соответствие пробел.

 

for(i = 0; i < 46; i++) m[letter[i+1]] = letter[i];

m[' '] = ' ';

 

Читаем текст построчно в массив char s[256]. Вычисляем длину текущей строки в переменной len. Для каждого символа s[i] выводим m[s[i]].Символ перевода каретки ‘\n’ выводится после каждой прочитанной строки.

 

while(gets(s))

{

  len = strlen(s);

  for(i = 0; i < len; i++)

    printf("%c",m[s[i]]);

  printf("\n");

}