/
AirLexa
/
origin
Обзор
Документация
Войти
/
AirLexa
/
origin
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
Lesson_04/Task_2/Task_2.cpp
105 строк
4 KB
AirLexa
обновил код Lesson_04/Task_2/Task_2.cpp
02 ноя 2025, 17:00
02 ноя 2025, 17:00
bba9657
Код
Авторство
О чём код?
#include <iostream> #include <string> #include <fstream> #include <windows.h> class address { private: // внутренние поля класса std::string town; std::string street; int house; int flat; public: // общедоступные методы address(std::string town, std::string street, int house, int flat) : town(town), street(street), house(house), flat(flat) {} void copy_address(address &a) // копирование полей из другого класса address { town = a.town; street = a.street; house = a.house; flat = a.flat; } std::string get_town() // геттер { return town; } std::string to_str() // адрес в строку { return town.append(", ").append(street).append(", ") .append(std::to_string(house)).append(", ").append(std::to_string(flat)); } }; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); std::ifstream fin("in.txt"); // файл находится в папке с исполняемым файлом if (!fin.is_open()) // проверка на доступ к файлу { std::cout << "Ошибка открытия файла: in.txt!" << std::endl; return -1; } int size = 0; fin >> size; if (size <= 0) // проверка на корректность значений размера { std::cout << "Ошибка! Количество адресов должно быть больше нуля!" << std::endl; return -1; } address** ad = new address*[size]; // массив адресов std::string s_town = "", s_street; // временная переменная int n_house = 0, n_flat = 0; // временная переменная for (int n = 0; n < size; n++) // считываем данные из in.txt { fin >> s_town >> s_street >> n_house >> n_flat; ad[n] = new address(s_town, s_street, n_house, n_flat); } fin.close(); // файл больше не нужен address a_tmp("", "", 0, 0); // временный объект for (int n = 1; n < size; ++n) // сортировка for (int m = n; m > 0; --m) // по первой букве if (ad[m]->get_town()[0] < ad[m - 1]->get_town()[0]) // в строке город { a_tmp.copy_address(*ad[m]); // меняем значения ad[m]->copy_address(*ad[m - 1]); ad[m - 1]->copy_address(a_tmp); } std::ofstream fout("out.txt"); // на запись fout << size << std::endl; // сначала размер for (int n = 0; n < size; n++) // потом все элементы массива fout << ad[n]->to_str() << std::endl; fout.flush(); fout.close(); fin.open("out.txt"); // посмотрим что мы записали if (!fin.is_open()) // проверка на доступ к файлу { std::cout << "Ошибка открытия файла: out.txt!" << std::endl; return 0; } std::cout << "Содержимое файла: out.txt" << std::endl; std::string s = ""; while (!fin.eof()) // чтение из файла { std::getline(fin, s); std::cout << s << std::endl; } fin.close(); for (int n = 0; n < size; n++) // освобождаем память под все элементы массива delete ad[n]; delete[] ad; // и сам массив return 0; }