Advertisement
DasShelmer

9.s.1struct sendto mail

Dec 5th, 2019
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. struct Player {
  7.     string name; // Имя игрока
  8.     int points = 0; // Кол-во очков у игрока
  9.  
  10.     // Оператор сравнения по именам в двух структурах
  11.     bool operator==(const Player& p) const {
  12.         return name == p.name;
  13.     }
  14.     // Оператор сравнения по имени
  15.     bool operator==(const string& n) const {
  16.         return name == n;
  17.     }
  18. };
  19. string to_string(Player *p) {
  20.     return p->name + " " + to_string(p->points);
  21. }
  22.  
  23. // Поиск первого игрока в массиве со сходным именем
  24. Player* find(Player* arr, const int length, const string name) {
  25.     for (int i = 0; i < length; i++)
  26.         if (arr[i] == name)
  27.             return arr + i; // аналог - &arr[i]
  28.     return NULL;
  29. }
  30.  
  31. int main() {
  32.     ifstream in("f1.txt");
  33.  
  34.     Player* players = NULL; // Основной массив игроков
  35.     string temp; // Временная переменная для чтения "пословно" из файла
  36.     int pCount = 0, // Кол-во игроков
  37.         operations = 0; // Кол-во матчей
  38.  
  39.     in >> temp;
  40.     pCount = stoi(temp);
  41.     players = new Player[pCount];
  42.     // Заполнение массива игроков из файла
  43.     for (int i = 0; i < pCount; i++)
  44.         in >> players[i].name;
  45.  
  46.     in >> temp;
  47.     operations = stoi(temp);
  48.     Player* from, // Проигравший
  49.         * to; // Победивший
  50.     int transfer; // Кол-во очков для обмена
  51.  
  52.     // Чтение матчей из файла и одновременное применение их результатов
  53.     for (int i = 0; i < operations; i++) {
  54.         in >> temp;
  55.         to = find(players, pCount, temp);
  56.         in >> temp;
  57.         from = find(players, pCount, temp);
  58.         in >> temp;
  59.         if (!from || !to || temp == "")
  60.             continue;
  61.         transfer = stoi(temp);
  62.  
  63.         from->points -= transfer;
  64.         to->points += transfer;
  65.     }
  66.     in.close();
  67.  
  68.     // Запись результатов в выходной файл
  69.     ofstream out("f2.txt");
  70.     for (auto p = players, pend = players + pCount; p < pend; p++)
  71.         out << to_string(p) << endl;
  72.     out.close();
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement