#include #include #include #include #define BUFFER_SIZE 100 #define MAX_PIZZAS 100 struct pizza { float cost; char name[BUFFER_SIZE]; }; // Преобразование символа в Leetspeak char to_leetspeak(char ch) { switch (tolower(ch)) { case 'o': return '0'; case 'i': return '1'; case 'z': return '2'; case 'e': return '3'; case 'a': return '4'; case 's': return '5'; case 't': return '7'; case 'b': return '8'; default: return tolower(ch); } } // Преобразование строки в Leetspeak void apply_leetspeak(char *input) { for (int i = 0; input[i] != '\0'; i++) { input[i] = to_leetspeak(input[i]); } } // Проверка на наличие подстроки в строке int has_substring(const char *name, const char *keyword) { char modified_name[BUFFER_SIZE]; char modified_keyword[BUFFER_SIZE]; strncpy(modified_name, name, BUFFER_SIZE); strncpy(modified_keyword, keyword, BUFFER_SIZE); apply_leetspeak(modified_name); apply_leetspeak(modified_keyword); return strstr(modified_name, modified_keyword) != NULL; } // Функция для считывания одной пиццы int load_pizza(struct pizza* p) { char temp_price[BUFFER_SIZE]; // Чтение названия пиццы if (!fgets(p->name, BUFFER_SIZE, stdin)) { return 0; // Ошибка при чтении или конец ввода } // Удаление символа новой строки p->name[strcspn(p->name, "\n")] = '\0'; // Чтение стоимости пиццы if (!fgets(temp_price, BUFFER_SIZE, stdin)) { return 0; // Ошибка при чтении или конец ввода } // Преобразование строки в число с плавающей точкой p->cost = strtof(temp_price, NULL); return p->cost > 0 || strcmp(temp_price, "0.0") == 0; } int main() { char query[BUFFER_SIZE]; struct pizza pizzas[MAX_PIZZAS]; int pizza_count = 0; // Ввод поискового запроса printf("Zadaj hladanu surovinu:\n"); fgets(query, BUFFER_SIZE, stdin); query[strcspn(query, "\n")] = '\0'; // Удаление символа новой строки // Ввод данных о пиццах printf("Zadaj jedalny listok:\n"); while (pizza_count < MAX_PIZZAS && load_pizza(&pizzas[pizza_count])) { pizza_count++; } int match_count = 0; // Поиск пицц, соответствующих запросу for (int i = 0; i < pizza_count; i++) { if (has_substring(pizzas[i].name, query)) { printf("%s\n", pizzas[i].name); printf("%.2f\n", pizzas[i].cost); match_count++; } } // Вывод общего количества считанных позиций printf("Nacitanych %d poloziek.\n", pizza_count); return 0; }