#include #include #include #define LINESIZE 100 struct MenuItem { char dish[LINESIZE]; float price; }; // Функція для нормалізації рядка за правилами "Hacker Script" void normalize(char* str) { for (int i = 0; str[i]; i++) { str[i] = tolower(str[i]); switch (str[i]) { case 'o': str[i] = '0'; break; case 'i': str[i] = '1'; break; case 'z': str[i] = '2'; break; case 'e': str[i] = '3'; break; case 'a': str[i] = '4'; break; case 's': str[i] = '5'; break; case 'd': str[i] = '6'; break; // 'b' mapped to '6' case 't': str[i] = '7'; break; case 'b': str[i] = '8'; break; case 'q': str[i] = '9'; break; default: break; // 'r', 'y', 'n', 'd' залишаються незмінними } } } // Функція для зчитування позиції меню int read_menu_item(struct MenuItem* item) { if (fgets(item->dish, LINESIZE, stdin) == NULL) { return 0; // Якщо зчитування не вдалося } if (strcmp(item->dish, "end\n") == 0) { return 0; // Команда виходу "end" } item->dish[strcspn(item->dish, "\n")] = 0; // Видалити символ нового рядка if (scanf("%f", &item->price) != 1) { getchar(); // Очищення буфера введення return 0; // Якщо зчитування не вдалося } getchar(); // Очищення буфера введення return 1; // Успішне зчитування } int main(void) { struct MenuItem menu[LINESIZE]; int item_count = 0; char search_string[LINESIZE]; // Запит на інгредієнт для пошуку printf("Zadaj hladanu surovinu: "); fgets(search_string, LINESIZE, stdin); search_string[strcspn(search_string, "\n")] = 0; // Видалити символ нового рядка // Нормалізація рядка пошуку normalize(search_string); printf("Zadaj jedalny listok:\n"); // Цикл для зчитування позицій меню while (item_count < LINESIZE) { struct MenuItem item; if (!read_menu_item(&item)) { break; // Вихід з циклу на помилці зчитування або "end" } // Нормалізація назви страви normalize(item.dish); menu[item_count++] = item; // Додати позицію до меню } // Пошук та вивід знайдених страв int found = 0; for (int i = 0; i < item_count; i++) { // Виконати прямий пошук нормалізованої страви проти нормалізованого рядка пошуку if (strstr(menu[i].dish, search_string) != NULL) { printf("%s\n%.2f\n", menu[i].dish, menu[i].price); found = 1; // Хоча б одна страва знайдена } } // Якщо пошук був неуспішним, нічого не виводимо // Підрахунок зчитаних позицій printf("Nacitanych %d poloziek.\n", item_count); return 0; }