Untitled
unknown
c_cpp
2 years ago
5.8 kB
11
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