MyTetra Share
Делитесь знаниями!
История имен и фамилий через класс
Время создания: 07.08.2017 12:34
Раздел: Computer - Programming - C++ - Coursera White_Belt

/*

Реализуйте класс для человека, поддерживающий

историю изменений человеком своих фамилии и имени.


Считайте, что в каждый год может произойти

не более одного изменения фамилии и не более

одного изменения имени. При этом с течением времени

могут открываться всё новые факты из прошлого человека,

поэтому года́ в последовательных вызовах методов

ChangeLastName и ChangeFirstName не обязаны возрастать.


Гарантируется, что все имена и фамилии непусты.

Строка, возвращаемая методом GetFullName,

должна содержать разделённые одним пробелом имя и фамилию

человека по состоянию на конец данного года.


Если к данному году не случилось ни одного изменения

фамилии и имени, верните строку "Incognito".

Если к данному году случилось изменение фамилии,

но не было ни одного изменения имени,

верните "last_name with unknown first name".

Если к данному году случилось изменение имени,

но не было ни одного изменения фамилии,

верните "first_name with unknown last name".

*/


#include <iostream>

#include <vector>

#include <map>


using namespace std;


class Person {

public:

void ChangeFirstName(int year, const string& first_name) {

// добавить факт изменения имени на first_name в год year

firstName[year] = first_name;

}

void ChangeLastName(int year, const string& last_name) {

lastName[year] = last_name;

// добавить факт изменения фамилии на last_name в год year

}

string GetFullName(int year) {

bool foundName = false;

bool foundSurn = false;

string name, surname;

int limit = firstName.begin() -> first;


for(int i = year; i >= limit; --i)

{

if(firstName.count(i))

{

name = firstName[i];

foundName = true;

break;

}

}

limit = lastName.begin() -> first;

for(int i = year; i >= limit; --i)

{

if(lastName.count(i))

{

surname = lastName[i];

foundSurn = true;

break;

}

}


if(foundName && foundSurn)

return name + " " + surname;

else if(foundName)

return name + " with unknown last name";

else if(foundSurn)

return surname + " with unknown first name";

else return "Incognito";

// получить имя и фамилию по состоянию на конец года year

}

private:

map<int, string> firstName;

map<int, string> lastName;

// приватные поля

};


int main()

{

Person person;

person.ChangeFirstName(1965, "Polina");

person.ChangeLastName(1967, "Sergeeva");

for (int year : {1900, 1965, 1990}) {

cout << person.GetFullName(year) << endl;

}

person.ChangeFirstName(1970, "Appolinaria");

for (int year : {1969, 1970}) {

cout << person.GetFullName(year) << endl;

}

person.ChangeLastName(1968, "Volkova");

for (int year : {1969, 1970}) {

cout << person.GetFullName(year) << endl;

}


getchar();

return 0;

}

Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования