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