Матч
30, Сколько дней рождений (HowManyBirthdays)
Имеется массив строк friends, содержащий имена и дни рождения друзей в
формате “ИМЯ ДЕНЬ МЕСЯЦ”, где ИМЯ содержит имя, а ДЕНЬ и МЕСЯЦ соответственно
день и месяц рождения. Строка today содержит текущую дату в формате “ДЕНЬ
МЕСЯЦ”. Требуется вывести имена сегодняшних именинников в лексикографическом
порядке.
Класс: HowManyBirthdays
Метод: vector<string> getList(vector<string> friends,
string
today)
Ограничения:
line содержит от 1 до 50 символов, каждый из
которых является цифрой или пробелом, числа в строке line
лежат в промежутке от 1 до 1000 включительно и не имеют ведущих нулей, line содержит как минимум одно число, 1 £ givenNumber
£ 1000.
Вход. Массив строк friends, содержащий
данные о друзьях и строка today, содержащая текущую дату.
Выход. Имена сегодняшних именинников в лексикографическом порядке.
Если именинников сегодня нет, то следует вывести пустой массив как показано в
примере.
Пример входа
friends |
today |
{"igor 13 6"} |
"14 6" |
{"larisa 27 3", "kira 7 4",
"max 12 3", "kirill 27 3"} |
"27 3" |
{"sasha 12 5"} |
"12 5" |
Пример выхода
{}
{"kirill", "larisa"}
{"sasha"}
РЕШЕНИЕ
обработка строк
Последовательно просматриваем
строки с информацией о друзьях. Для каждого друга выделяем его имя и дату
рождения. Если дата рождения совпадает с текущей датой, то заносим имя в массив
res.
Сортируем массив имен res и
возвращаем его в качестве результата.
ПРОГРАММА
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class HowManyBirthdays
{
public:
vector<string> getList(vector<string> friends, string today)
{
int i;
vector<string> res;
char name[50];
string date;
for(i = 0; i < friends.size(); i++)
{
sscanf(friends[i].c_str(),"%s",name);
date = friends[i].substr(strlen(name) + 1);
if (date == today)
res.push_back((string)name);
}
sort(res.begin(),res.end());
return res;
}
};