Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- struct Player {
- string name; // Имя игрока
- int points = 0; // Кол-во очков у игрока
- // Оператор сравнения по именам в двух структурах
- bool operator==(const Player& p) const {
- return name == p.name;
- }
- // Оператор сравнения по имени
- bool operator==(const string& n) const {
- return name == n;
- }
- };
- string to_string(Player *p) {
- return p->name + " " + to_string(p->points);
- }
- // Поиск первого игрока в массиве со сходным именем
- Player* find(Player* arr, const int length, const string name) {
- for (int i = 0; i < length; i++)
- if (arr[i] == name)
- return arr + i; // аналог - &arr[i]
- return NULL;
- }
- int main() {
- ifstream in("f1.txt");
- Player* players = NULL; // Основной массив игроков
- string temp; // Временная переменная для чтения "пословно" из файла
- int pCount = 0, // Кол-во игроков
- operations = 0; // Кол-во матчей
- in >> temp;
- pCount = stoi(temp);
- players = new Player[pCount];
- // Заполнение массива игроков из файла
- for (int i = 0; i < pCount; i++)
- in >> players[i].name;
- in >> temp;
- operations = stoi(temp);
- Player* from, // Проигравший
- * to; // Победивший
- int transfer; // Кол-во очков для обмена
- // Чтение матчей из файла и одновременное применение их результатов
- for (int i = 0; i < operations; i++) {
- in >> temp;
- to = find(players, pCount, temp);
- in >> temp;
- from = find(players, pCount, temp);
- in >> temp;
- if (!from || !to || temp == "")
- continue;
- transfer = stoi(temp);
- from->points -= transfer;
- to->points += transfer;
- }
- in.close();
- // Запись результатов в выходной файл
- ofstream out("f2.txt");
- for (auto p = players, pend = players + pCount; p < pend; p++)
- out << to_string(p) << endl;
- out.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement