#include #include #include #include #define LINESIZE 100 #define MAX_PIZZAS 100 // Структура для хранения элемента меню пиццы struct pizza { float price; char name[LINESIZE]; }; // Функция для преобразования символа в его Хакер Скриптовая форма char hacker_script(char c) { char numbers[] = "0123456789"; char letters[] = "oizeasbtbq"; // Сначала преобразуйте в нижний регистр c = tolower(c); // Проверка на специальные символы for (int i = 0; i < 10; i++) { if (c == numbers[i]) { return letters[i]; } } return c; } // Функция для нормализации строки с применением правил хакерского скрипта void normalize_string(char *str) { for (int i = 0; str[i]; i++) { str[i] = hacker_script(str[i]); } } // Функция для чтения одного элемента пиццы из ввода int read_pizza(struct pizza *item) { char line1[LINESIZE], line2[LINESIZE]; // Чтение имени if (fgets(line1, LINESIZE, stdin) == NULL) { return 0; // Не удалось прочитать } // Удалить символ новой строки line1[strcspn(line1, "\n")] = '\0'; // Чтение цены if (fgets(line2, LINESIZE, stdin) == NULL) { return 0; // Ошибка чтения } float value = strtof(line2, NULL); if (value == 0.0F) { return 0; // Неверная цена } // Копируем прочитанные значения strcpy(item->name, line1); item->price = value; return 1; } // Функция для поиска, существует ли нормализованная игла в нормализованной куче int search_string(const char *heap, const char *needle) { char norm_heap[LINESIZE], norm_needle[LINESIZE]; // Сделать копии для нормализации strcpy(norm_heap, heap); strcpy(norm_needle, needle); // Нормализуйте обе строки normalize_string(norm_heap); normalize_string(norm_needle); // Используйте strstr, чтобы найти нормализованную иглу в куче return strstr(norm_heap, norm_needle) != NULL; } int main() { struct pizza menu[MAX_PIZZAS]; char search[LINESIZE]; int count = 0; // Чтение строки поиска printf("Zadaj hladanu surovinu:\n"); fgets(search, LINESIZE, stdin); search[strcspn(search, "\n")] = '\0'; // Удалить символ новой строки // Чтение меню printf("Zadaj jedalny listok:\n"); while (read_pizza(&menu[count])) { count++; if (count >= MAX_PIZZAS) { break; // Достигнут лимит } } // Отобразить подходящие блюда, содержащие искомый ингредиент int found = 0; for (int i = 0; i < count; i++) { if (search_string(menu[i].name, search)) { printf("%s\n", menu[i].name); printf("%.2f\n", menu[i].price); found++; } } // Отобразить общее количество элементов прочитано printf("Nacitanych %d poloziek.\n", count); return 0; }