View difference between Paste ID: EZv4WDN6 and CYe1iei9
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
    }