usaa24/cv1/program.c

102 lines
3.3 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]);
// Заміна символів відповідно до "Hacker Script"
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 'b': str[i] = '6'; break; // Залишаємо 'b' на 6
case 't': str[i] = '7'; break;
case 'g': str[i] = '9'; break; // Додаємо 'g' на 9
case 'q': str[i] = '9'; break; // Додаємо 'q' на 9
default: break; // нічого не робимо для інших символів
}
}
}
// Функція для зчитування страви
int read_menu_item(struct MenuItem* item) {
// Зчитуємо назву страви
if (fgets(item->dish, LINESIZE, stdin) == NULL) {
return 0; // Якщо зчитування не вдалося
}
// Перевіряємо, чи введено "end"
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;
}
}
if (!found) {
printf("Zadana surovina nebola najdena.\n");
}
printf("Nacitanych %d poloziek.\n", item_count);
return 0;
}