Untitled
unknown
c_cpp
2 years ago
5.8 kB
6
Indexable
#include <iostream> #include <string> // ВОТ СЮДА СВОЮ СТРУКТУРУ ВПИШИ. НЕКОТОРЫЕ МЕТОДЫ МОГУТ ОТЛИЧАТЬСЯ. struct blog { char* FIO; int fio_length; unsigned int posts_count; unsigned int raiting_place; }; blog* createBlogsArray(int blogs_count) { return new blog[blogs_count]; } void copyBlogs(blog* from, blog* to, int blogs_cnt) { for (int i = 0; i < blogs_cnt; i++) { to[i] = from[i]; } } void deleteBlogsArray(blog* blogs_array) { delete[] blogs_array; } char* resizeFIO(char *fio, int current_len) { char* new_fio = new char[current_len + 1]; for (int i = 0; i < current_len; i++) { new_fio[i] = fio[i]; } delete[] fio; return new_fio; } blog findByFIO(blog* blogs, int blogs_count, std::string finding) { for (int i = 0; i < blogs_count; i++) { blog b = blogs[i]; bool is_correct = 1; for (int j = 0; j < b.fio_length; j++) { if (b.FIO[j] != finding[j]) { is_correct = 0; break; } } if (is_correct) return b; } return { NULL, -1, 0, 0 }; } blog findByNumeric(blog* blogs, int blogs_count, int field_id, int finding) { for (int i = 0; i < blogs_count; i++) { blog b = blogs[i]; int field = 0; switch (field_id) { case 1: field = b.posts_count; break; case 2: field = b.raiting_place; break; default: field = b.posts_count; break; } if (field == finding) { return b; } } return { NULL, -1, 0, 0 }; } void fillBlog(blog &new_blog, bool is_edit = 0) { if (is_edit) { delete[] new_blog.FIO; } std::string sfio; char* fio; int strlen = 0; unsigned int posts_count = 0; unsigned int raiting_place = 0; printf("Введите название блога: "); std::cin >> sfio; strlen = sfio.length(); fio = new char[strlen]; for (int i = 0; i < strlen; i++) { fio[i] = sfio[i]; } printf("Введите количество постов в блоге: "); std::cin >> posts_count; printf("Введите место блога в рейтинге: "); std::cin >> raiting_place; new_blog = { fio, strlen, posts_count, raiting_place }; } blog* addBlog(blog* blogs, blog newBlog, int n) { blog* new_blogs_array = createBlogsArray(n + 1); copyBlogs(blogs, new_blogs_array, n); new_blogs_array[n] = newBlog; deleteBlogsArray(blogs); return new_blogs_array; } void showBlog(blog showing_blog) { printf("{"); for (int i = 0; i < showing_blog.fio_length; i++) { printf("%c", showing_blog.FIO[i]); } printf("; %d; %d}\n", showing_blog.posts_count, showing_blog.raiting_place); } void setBlogValuesById(blog** blogs, int id) { blog editableBlog = *blogs[id]; fillBlog(editableBlog, 1); *blogs[id] = editableBlog; } void showControls() { printf("\n\n1. Добавить блог.\n2. Заменить значения массива по идентификатору.\n3. Поиск по номеру поля.\n4.Обмен значениями между элементами массива.\n5.Сортировка по количеству записей по убыванию.\n6.Вывод одного элемента массива.\n7.Не пытайся покинуть ОМСК!\n"); } void readWriteField(blog* blogs, int blogs_count) { int index = 0; int operation = 0; printf("Введите индекс элемента: "); std::cin >> index; if (index > blogs_count) { printf("Индекс больше возможного. Всего %d элементов\n", blogs_count); return; } printf("Введите номер операции, 1 – установка, 2 – получение: "); std::cin >> operation; switch (operation) { case 1: setBlogValuesById(&blogs, index); break; case 2: showBlog(blogs[index]); break; } } void searchByField(blog* blogs, int blogs_count) { int field_number = 0; blog founded = {}; printf("Введите номер поля, по которому будет выполняться поиск: "); std::cin >> field_number; printf("Введите значение поля, которое нужно найти: "); if (field_number == 0) { std::string search_str; std::cin >> search_str; founded = findByFIO(blogs, blogs_count, search_str); } else { int field_value = 0; std::cin >> field_value; founded = findByNumeric(blogs, blogs_count, field_number, field_value); } if (founded.fio_length == -1) { printf("\nВНИМАНИЕ: Блог с таким значением не существует!\n"); } else { printf("Найден блог с такими значениями: "); showBlog(founded); } } int main() { bool is_working = 1; int blogs_count = 0; char command = '\0'; setlocale(LC_ALL, "ru-ru"); blog* blogs = NULL; while (is_working) { showControls(); printf("Выберите команду:"); std::cin >> command; blog new_blog = {}; switch (command) { case '1': fillBlog(new_blog); if(findByNumeric(blogs, blogs_count, 2, new_blog.raiting_place).FIO != NULL){ // Если место в рейтинге занято printf("\n\nНе удалось добавить блог. Место в рейтинге занято.\n\n"); } else { //Если место в рейтинге не занято blogs = addBlog(blogs, new_blog, blogs_count); blogs_count++; printf("\nУспешно добавлен блог со значениями полей:\n"); showBlog(new_blog); } break; case '2': if (blogs_count == 0) { printf("У вас нет элементов. Добавьте их, используя команду 1.\n"); } else { readWriteField(blogs, blogs_count); } break; case '3': searchByField(blogs, blogs_count); break; case '7': is_working = 0; break; default: break; } } }
Editor is loading...
Leave a Comment