Матч 257, Код замены (SubstitutionCode)

Дивизион 2, Уровень 1

 

В задаче следует декодировать строку символов code. Каждая цифра закодирована буквой. Ключом является строка key из 10 букв. Цифра 1 соответствует первой букве ключа key, цифра 2 – второй букве и так далее. Цифра 0 соответствует последней букве. Буквы закодированной строки code, которые не встречаются в ключе key, игнорируются.

 

Класс: SubstitutionCode

Метод: int getValue(string key, string code)

Ограничения: code содержит от 1 до 9 символов ‘A’ – ‘Z’, key содержит в точности 10 разных символов, code содержит хотя бы один символ, содержащийся в key.

 

Вход. Две строки символов key и code.

 

Выход. Декодированная строка.

 

Пример входа

key

code

“TRADINGFEW”

“LGXWEV”

“ABCDEFGHIJ”

“XJ”

“CRYSTALBUM”

“MMA”

 

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

709

0

6

 

 

РЕШЕНИЕ

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

 

Для каждой  i - ой буквы из кода code следует найти ее позицию pos в ключе key при помощи метода find класса string. Если буква не найдена, метод возвратит -1. Если соответствующая буква найдена в ключе, то припишем к результату res цифру (pos + 1) % 10.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

class SubstitutionCode

{

public:

  int getValue(string key, string code)

  {

    int i, pos, res;

    for(i = res = 0; i < code.size(); i++)

    {

      pos = key.find(code[i]);

      if (pos >= 0) res = res * 10 + (pos + 1) % 10;

    }

    return res;

  }

};