Матч 21, Почта (PostOffice)

 

Строки address1 и address2 содержат адреса домов. Адреса считаются одинаковыми, если они совпадают после удаления из них пробелов. Заглавные и прописные буквы считаются одинаковыми. Если адреса одинаковы, вернуть -1. Иначе вернуть номер наименьшего индекса, в котором отличаются адреса (после удаления пробелов). Нумерация индексов начинается с 0.

 

Класс: PostOffice

Метод: int matchAddress(string address1, string address2)

Ограничения: address1 и address2  содержат от 0 до 50 символов ‘a’ – ‘z’, ‘A’ – ‘Z’, ‘0’ – ‘9’.

 

Вход. Две строки address1 и address2.

 

Выход. Индекс первого несовпадения строк согласно описанному в условии алгоритма, или -1 при совпадении адресов.

 

Пример входа

address1

address2

"145 West 44th Street"

"145 west 44 th street"

" Wall Street"

"  Waal Street"

"Wall"

"WallStreet"

 

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

-1

2

4

 

 

РЕШЕНИЕ

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

 

Удалим из адресов address1 и address2 пробелы и занесем их соответственно в строки а и b. При этом все буквы преобразуем в верхний регистр. Если полученные строки одинаковы (совпадают), возвращаем -1. Иначе ищем индекс первого несовпадения и возвращаем его.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

class PostOffice

{

public:

  int matchAddress(string address1, string address2)

  {

    int i;

    string a, b;

    for(i = 0; i < address1.size(); i++)

      if (address1[i] != ' ') a += tolower(address1[i]);

    for(i = 0; i < address2.size(); i++)

       if (address2[i] != ' ') b += tolower(address2[i]);

    if (a == b) return -1;

    for(i = 0; a[i] == b[i]; i++);

    return i;

  }

};