usaa24/cv1/program.c

103 lines
3.0 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 <stdlib.h>
#include <ctype.h>
#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;
}