usaa24/cv1/program.c

95 lines
2.7 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 prize;
char name[LINESIZE];
};
char hacker_script(char c) {
// Перетворення відповідно до "Hack3r scr1pt"
switch (c) {
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 'd': return '6';
case 't': return '7';
case 'b': return '8';
case 'q': return '9';
default: return tolower(c); // Зробити маленьким
}
}
void normalize(char *input, char *output) {
for (int i = 0; input[i] != '\0'; i++) {
output[i] = hacker_script(input[i]);
}
output[strlen(input)] = '\0'; // Завершити рядок
}
int read_pizza(struct pizza *item) {
char line[LINESIZE];
if (fgets(line, sizeof(line), stdin) == NULL) return 0;
// Зчитування назви
strcpy(item->name, line);
// Зчитування ціни
if (fgets(line, sizeof(line), stdin) == NULL) return 0;
// Перетворення рядка на float
item->prize = strtof(line, NULL);
if (item->prize == 0.0F) return 0; // Перевірка на успішність
return 1; // Успішно зчитано
}
int search_string(const char *haystack, const char *needle) {
for (int i = 0; haystack[i] != '\0'; i++) {
int j;
for (j = 0; needle[j] != '\0' && haystack[i + j] == needle[j]; j++);
if (needle[j] == '\0') return i; // Знайдено
}
return -1; // Не знайдено
}
int main() {
char search[LINESIZE];
struct pizza menu[MAX_PIZZAS];
char normalized_search[LINESIZE];
int count = 0;
printf("Zadaj hladanu surovinu:\n");
fgets(search, sizeof(search), stdin);
search[strcspn(search, "\n")] = 0; // Прибрати символ нового рядка
// Нормалізація пошукового рядка
normalize(search, normalized_search);
printf("Zadaj jedalny listok:\n");
while (read_pizza(&menu[count]) && count < MAX_PIZZAS) {
count++;
}
// Пошук і вивід результатів
printf("Znalezené jedlá:\n");
for (int i = 0; i < count; i++) {
char normalized_name[LINESIZE];
normalize(menu[i].name, normalized_name);
if (search_string(normalized_name, normalized_search) != -1) {
printf("%s%.2f\n", menu[i].name, menu[i].prize);
}
}
printf("Nacitanych %d poloziek.\n", count);
return 0;
}