usaa24/cv1/program.c

96 lines
3.2 KiB
C
Raw 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];
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:\n");
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; // Додати позицію до меню
}
// Вивід знайдених страв
for (int i = 0; i < item_count; i++) {
// Перевіряємо, чи містить страва шуканий інгредієнт
if (strstr(menu[i].dish, search_string) != NULL) {
// Виводимо знайдену страву
printf("%s\n", menu[i].dish);
printf("%.2f\n", menu[i].price);
break; // Вихід з циклу після першої знайденої страви
}
}
printf("Nacitanych %d poloziek.\n", item_count);
return 0;
}