From fc0e556f11d5ec0da894d9b137257174a652aa19 Mon Sep 17 00:00:00 2001 From: Yurii Chechur Date: Wed, 2 Oct 2024 19:48:44 +0000 Subject: [PATCH] Update cv1/program.c --- cv1/program.c | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/cv1/program.c b/cv1/program.c index 5e74274..9ad12cb 100644 --- a/cv1/program.c +++ b/cv1/program.c @@ -5,28 +5,33 @@ #define LINESIZE 100 struct MenuItem { - char dish[LINESIZE]; + char dish[LINESIZE]; // Оригінальна назва страви + char normalized_dish[LINESIZE]; // Нормалізована назва страви float price; }; // Функція для нормалізації рядка за правилами "Hacker Script" -void normalize(char* str) { +void normalize(const char* str, char* normalized_str) { + int j = 0; // Індекс для нормалізованого рядка + 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' залишаються незмінними + 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'; // Завершити рядок } // Функція для зчитування позиції меню @@ -41,6 +46,9 @@ int read_menu_item(struct MenuItem* item) { item->dish[strcspn(item->dish, "\n")] = 0; // Видалити символ нового рядка + // Нормалізація назви страви та збереження в інший масив + normalize(item->dish, item->normalized_dish); + if (scanf("%f", &item->price) != 1) { getchar(); // Очищення буфера введення return 0; // Якщо зчитування не вдалося @@ -57,12 +65,13 @@ int main(void) { char search_string[LINESIZE]; // Запит на інгредієнт для пошуку - printf("Zadaj hladanu surovinu:\n"); + printf("Zadaj hladanu surovinu: "); fgets(search_string, LINESIZE, stdin); search_string[strcspn(search_string, "\n")] = 0; // Видалити символ нового рядка // Нормалізація рядка пошуку - normalize(search_string); + char normalized_search[LINESIZE]; + normalize(search_string, normalized_search); printf("Zadaj jedalny listok:\n"); @@ -73,22 +82,21 @@ int main(void) { 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) { + if (strstr(menu[i].normalized_dish, normalized_search) != NULL) { // Виводимо знайдену страву - printf("%s\n", menu[i].dish); + printf("%s\n", menu[i].dish); // Оригінальна назва страви printf("%.2f\n", menu[i].price); break; // Вихід з циклу після першої знайденої страви } } + // Вивід загальної кількості зчитаних позицій printf("Nacitanych %d poloziek.\n", item_count); return 0;