usaa24/cv1/program.c

117 lines
3.5 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 LINESIZE 100
#define MAX_PIZZAS 100
// Структура для хранения элемента меню пиццы
struct pizza {
float price;
char name[LINESIZE];
};
// Функция для преобразования символа в его Хакер Скриптовая форма
char hacker_script(char c) {
char numbers[] = "0123456789";
char letters[] = "oizeasbtbq";
// Сначала преобразуйте в нижний регистр
c = tolower(c);
// Проверка на специальные символы
for (int i = 0; i < 10; i++) {
if (c == numbers[i]) {
return letters[i];
}
}
return c;
}
// Функция для нормализации строки с применением правил хакерского скрипта
void normalize_string(char *str) {
for (int i = 0; str[i]; i++) {
str[i] = hacker_script(str[i]);
}
}
// Функция для чтения одного элемента пиццы из ввода
int read_pizza(struct pizza *item) {
char line1[LINESIZE], line2[LINESIZE];
// Чтение имени
if (fgets(line1, LINESIZE, stdin) == NULL) {
return 0; // Не удалось прочитать
}
// Удалить символ новой строки
line1[strcspn(line1, "\n")] = '\0';
// Чтение цены
if (fgets(line2, LINESIZE, stdin) == NULL) {
return 0; // Ошибка чтения
}
float value = strtof(line2, NULL);
if (value == 0.0F) {
return 0; // Неверная цена
}
// Копируем прочитанные значения
strcpy(item->name, line1);
item->price = value;
return 1;
}
// Функция для поиска, существует ли нормализованная игла в нормализованной куче
int search_string(const char *heap, const char *needle) {
char norm_heap[LINESIZE], norm_needle[LINESIZE];
// Сделать копии для нормализации
strcpy(norm_heap, heap);
strcpy(norm_needle, needle);
// Нормализуйте обе строки
normalize_string(norm_heap);
normalize_string(norm_needle);
// Используйте strstr, чтобы найти нормализованную иглу в куче
return strstr(norm_heap, norm_needle) != NULL;
}
int main() {
struct pizza menu[MAX_PIZZAS];
char search[LINESIZE];
int count = 0;
// Чтение строки поиска
printf("Zadaj hladanu surovinu:\n");
fgets(search, LINESIZE, stdin);
search[strcspn(search, "\n")] = '\0'; // Удалить символ новой строки
// Чтение меню
printf("Zadaj jedalny listok:\n");
while (read_pizza(&menu[count])) {
count++;
if (count >= MAX_PIZZAS) {
break; // Достигнут лимит
}
}
// Отобразить подходящие блюда, содержащие искомый ингредиент
int found = 0;
for (int i = 0; i < count; i++) {
if (search_string(menu[i].name, search)) {
printf("%s\n", menu[i].name);
printf("%.2f\n", menu[i].price);
found++;
}
}
// Отобразить общее количество элементов прочитано
printf("Nacitanych %d poloziek.\n", count);
return 0;
}