10921. Найти телефон

 

В некоторых телефонах номера ассоциируются с буквами. Например, фраза MY LOVE может означать номер 69 5683. Проблема состоит в том, что телефонный номер не всегда ассоциируется со словом или фразой, а цифры 1 и 0 вообще не связаны ни с какой буквой.

буква

ABC

DEF

GHI

JKL

MNO

PQRS

TUV

WXYZ

цифра

2

3

4

5

6

7

8

9

Имеется выражение, состоящее из заглавных букв латинского алфавита, дефисов и цифр 0 и 1. Необходимо найти соответствующий ему телефонный номер.

 

Вход. Каждая строка содержит выражение, состоящее из заглавных букв латинского алфавита, дефисов и цифр 0 и 1. Каждое выражение содержит не более 30 символов.

 

Выход. Для каждого выражения вывести соответствующий ему телефонный номер.

 

Пример входа

1-HOME-SWEET-HOME

MY-MISERABLE-JOB

 

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

1-4663-79338-4663

69-647372253-562

 

 

РЕШЕНИЕ

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

 

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

Создадим массив code, хранящий отображения букв в цифры. Далее для каждого выражения заменяем все встретившиеся в нем буквы на соответствующие цифры.

 

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

В массиве code содержатся цифры, соответствующие буквам: code[i] содержит код буквы ‘A’ + i. Строковый массив s содержит входное выражение.

 

char code[26] = {'2','2','2','3','3','3','4','4','4','5','5','5','6','6',

                 '6','7','7','7','7','8','8','8','9','9','9','9'};

char s[31];

 

Основной цикл программы. Читаем входное выражение в строку s. Просматриваем строку s слева направо и для каждую букву s[i] заменяем на соответствующую цифру code[s[i]-'A'].

 

while(scanf("%s",s) == 1)

{

   for(i=0;i<strlen(s);i++)

     if (isalpha(s[i])) s[i] = code[s[i]-'A'];

   printf("%s\n",s);

}