// Определить структурный тип, описывающий книги домашней
// библиотеки(автор, название книги, издательство, год издания, стоимость).Заполнить
// структурный массив 10 - ю записями. Переписать из исходного массива в другой массив,
// информацию только о тех книгах, в название которых есть по 3 буквы «о». Затем
// вывести информацию, отсортированную по названию издательства по алфавиту.
// (рационально переставлять все поля структуры разом)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// Структура для представления книги
struct Book {
string author;
string title;
string publisher;
int year;
double cost;
};
void main() {
setlocale(LC_ALL, "ru");
const int size = 1; // Задайте нужный размер массива книг
Book library[size];
// Ввод информации по книгам
for (int i = 0; i < size; ++i) {
cout << "Введите автора книги " << i + 1 << ": ";
getline(cin, library[i].author);
cout << "Введите название книги " << i + 1 << ": ";
getline(cin, library[i].title);
cout << "Введите издательство книги " << i + 1 << ": ";
getline(cin, library[i].publisher);
cout << "Введите год издания книги " << i + 1 << ": ";
cin >> library[i].year;
cout << "Введите стоимость книги " << i + 1 << ": ";
cin >> library[i].cost;
cin.ignore(); // Очищаем буфер после ввода чисел
}
// Подсчитываем количество книг с тремя буквами 'о' в названии
int countWithO = 0;
for (int i = 0; i < size; ++i) {
int oCount = 0;
for (char ch : library[i].title) {
if (tolower(ch) == 'о') {
oCount++;
}
}
if (oCount == 3) {
countWithO++;
}
}
// Создаем массив для книг с тремя буквами 'о' в названии
Book* booksWithO = new Book[countWithO];
int booksWithOCount = 0;
// Переписываем информацию только о книгах с тремя буквами 'о' в названии
for (int i = 0; i < size; ++i) {
int oCount = 0;
for (char ch : library[i].title) {
if (tolower(ch) == 'о') {
oCount++;
}
}
if (oCount == 3) {
booksWithO[booksWithOCount++] = library[i];
}
}
// Сортируем массив книг с тремя буквами 'о' в названии по названию издательства
for (int i = 0; i < booksWithOCount - 1; ++i) {
for (int j = 0; j < booksWithOCount - i - 1; ++j) {
if (booksWithO[j].publisher > booksWithO[j + 1].publisher) {
swap(booksWithO[j], booksWithO[j + 1]);
}
}
}
// Выводим информацию о книгах с тремя буквами 'о' в названии, отсортированную по названию издательства
cout << "Информация о книгах с тремя буквами 'о' в названии, отсортированная по названию издательства:" << endl;
for (int i = 0; i < booksWithOCount; ++i) {
cout << "Автор: " << booksWithO[i].author << endl;
cout << "Название: " << booksWithO[i].title << endl;
cout << "Издательство: " << booksWithO[i].publisher << endl;
cout << "Год издания: " << booksWithO[i].year << endl;
cout << "Стоимость: " << booksWithO[i].cost << endl << endl;
}
delete[] booksWithO;
}
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// Структура для представления книги
struct Book {
string author;
string title;
string publisher;
int year;
double cost;
};
int count_o(const string& title)
{
int oCount = 0;
enum { NotO, PossiblyO } state = NotO;
for (char ch : title) {
switch (state) {
case NotO:
if (ch == 0xFFFFFFD0)
state = PossiblyO;
break;
case PossiblyO:
if (ch == 0xFFFFFFBE || ch == 0xFFFFFF9E) {
state = NotO;
oCount++;
}
break;
}
}
return oCount;
}
int main() {
setlocale(LC_ALL, "ru");
const int size = 1; // Задайте нужный размер массива книг
Book library[size];
// Ввод информации по книгам
for (int i = 0; i < size; ++i) {
cout << "Введите автора книги " << i + 1 << ": ";
getline(cin, library[i].author);
cout << "Введите название книги " << i + 1 << ": ";
getline(cin, library[i].title);
cout << "Введите издательство книги " << i + 1 << ": ";
getline(cin, library[i].publisher);
cout << "Введите год издания книги " << i + 1 << ": ";
cin >> library[i].year;
cout << "Введите стоимость книги " << i + 1 << ": ";
cin >> library[i].cost;
cin.ignore(); // Очищаем буфер после ввода чисел
}
// Подсчитываем количество книг с тремя буквами 'о' в названии
int countWithO = 0;
for (int i = 0; i < size; ++i) {
if (count_o(library[i].title) == 3) {
countWithO++;
}
}
// Создаем массив для книг с тремя буквами 'о' в названии
Book* booksWithO = new Book[countWithO];
int booksWithOCount = 0;
// Переписываем информацию только о книгах с тремя буквами 'о' в названии
for (int i = 0; i < size; ++i) {
if (count_o(library[i].title) == 3) {
booksWithO[booksWithOCount++] = library[i];
}
}
// Сортируем массив книг с тремя буквами 'о' в названии по названию издательства
for (int i = 0; i < booksWithOCount - 1; ++i) {
for (int j = 0; j < booksWithOCount - i - 1; ++j) {
if (booksWithO[j].publisher > booksWithO[j + 1].publisher) {
swap(booksWithO[j], booksWithO[j + 1]);
}
}
}
// Выводим информацию о книгах с тремя буквами 'о' в названии, отсортированную по названию издательства
cout << "Информация о книгах с тремя буквами 'о' в названии, отсортированная по названию издательства:" << endl;
for (int i = 0; i < booksWithOCount; ++i) {
cout << "Автор: " << booksWithO[i].author << endl;
cout << "Название: " << booksWithO[i].title << endl;
cout << "Издательство: " << booksWithO[i].publisher << endl;
cout << "Год издания: " << booksWithO[i].year << endl;
cout << "Стоимость: " << booksWithO[i].cost << endl << endl;
}
delete[] booksWithO;
return 0;
}