SHOW:
|
|
- or go back to the newest paste.
1 | #include <iostream> | |
2 | #include <vector> | |
3 | #include <string> | |
4 | using namespace std; | |
5 | typedef vector<string> vecstr; // добавление шаблона для типа данных vector<string> | |
6 | struct Body{ | |
7 | Body(string F, int age, bool sex){ | |
8 | this->F = F; | |
9 | this->age = age; | |
10 | this->sex = sex; | |
11 | }; // Конструктор для структуры. this - указатель на члены структуры , а не на члены функции. | |
12 | string F; | |
13 | int age; | |
14 | bool sex; | |
15 | static const bool male = false; | |
16 | static const bool female = true; // статичные переменные для определения пола | |
17 | }; | |
18 | vecstr split(string str, string substr = " "){ // функция для разделения строки на вектор строк | |
19 | vecstr result; | |
20 | str += substr; | |
21 | int ssl = substr.length(); | |
22 | int sl = str.length(); | |
23 | int sub = 0; | |
24 | for (int i = 0; i < sl; i++){ | |
25 | string buff = str.substr(i, ssl); | |
26 | if (buff == substr) { | |
27 | i+=ssl - 1; | |
28 | result.push_back(str.substr(i-sub+1, sub-1)); | |
29 | sub = 0; | |
30 | } | |
31 | sub++; | |
32 | } | |
33 | return result; | |
34 | } | |
35 | ||
36 | int main(){ | |
37 | vector<Body> city; // вектор жителей города | |
38 | - | vecstr data = split("Первый 12 0 Второй 19 0 Третяя 22 1 Четвертый 15 0 Четвертый 19 0"); |
38 | + | vecstr data = split("Первый 12 0 Второй 19 0 Третяя 22 1 Четвертый 15 0 Пятый 19 0"); |
39 | for(int i = 0; i!=data.size()/3; i++){ | |
40 | bool sex; | |
41 | if (data[3*i+2] == "1") sex = Body::female; | |
42 | else sex = Body::male; // чтение из строки пола | |
43 | Body body(data[3*i], stoi(data[3*i+1]), sex); // создание класса | |
44 | city.push_back(body); //добавление класса в вектор классов | |
45 | } | |
46 | double malemid = 0; | |
47 | double femalemid = 0; | |
48 | int femcount = 0; | |
49 | int malecount = 0; | |
50 | for(auto v : city){ // цикл for основанный на длинне вектора city, auto - самоподставляющийся тип данных | |
51 | if (v.sex == Body::male) {malecount++; malemid+=v.age;} | |
52 | else {femcount++; femalemid+=v.age;} // суммарный возвраст и кол-во | |
53 | } | |
54 | cout << "Колличество женщин " << femcount << endl; | |
55 | cout << "Колличество мужчин " << malecount << endl; | |
56 | malemid /= malecount; | |
57 | femalemid /= femcount; //вычисление среднего возвраста | |
58 | cout << "Средний возвраст женщин " << femalemid << endl; | |
59 | cout << "Средний возвраст мужчин " << malemid << endl; | |
60 | cout << "\nСписок мужчин, чьих возвраст выше среднего" << endl; | |
61 | for(auto v: city){ // вывод списков | |
62 | if (v.sex == Body::male and v.age > malemid){ | |
63 | cout << v.F << endl; | |
64 | } | |
65 | } | |
66 | cout << "\nСписок женщин, чьих возвраст выше среднего" << endl; | |
67 | for(auto v: city){ | |
68 | if (v.sex == Body::female and v.age < femalemid){ | |
69 | cout << v.F << endl; | |
70 | } | |
71 | } | |
72 | ||
73 | } |