usaa24/cv1/program.c

103 lines
3.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#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);
}
}
// Вивід загальної кількості зчитаних позицій
printf("Nacitanych %d poloziek.\n", item_count);
return 0;
}