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 | } |