#include #include #include #include #define LINESIZE 100 #define MAX_PIZZAS 1000 struct pizza { float prize; char name[LINESIZE]; }; // "Hacker Script" char hacker_script(char c) { c = tolower(c); char numbers[] = "0123456789"; char letters[] = "oizeasbtbq"; for (int i = 0; i < 10; i++) { if (c == numbers[i]) { return letters[i]; } } switch(c) { case 'o': return 'o'; case 'i': return 'i'; case 'z': return 'z'; case 'e': return 'e'; case 'a': return 'a'; case 's': return 's'; case 'b': return 'b'; case 't': return 't'; case 'q': return 'q'; default: return c; } } void normalize_string(char* dest, const char* src) { int j = 0; for(int i = 0; src[i] != '\0' && j < LINESIZE - 1; i++) { dest[j++] = hacker_script(src[i]); } dest[j] = '\0'; } int search_string(const char* heap, const char* needle) { int heap_len = strlen(heap); int needle_len = strlen(needle); if(needle_len == 0) return 0; for(int i = 0; i <= heap_len - needle_len; i++) { int j = 0; while(j < needle_len && heap[i + j] == needle[j]) { j++; } if(j == needle_len) { return i; } } return -1; } // Funkcia na načítanie jednej položky jedálneho lístka int read_pizza(FILE* fp, struct pizza* item) { char line1[LINESIZE]; char line2[LINESIZE]; // Načítať názov if(fgets(line1, sizeof(line1), fp) == NULL) { return 0; } line1[strcspn(line1, "\n")] = '\0'; if(fgets(line2, sizeof(line2), fp) == NULL) { return 0; } line2[strcspn(line2, "\n")] = '\0'; float value = strtof(line2, NULL); if(value == 0.0F && strcmp(line2, "0") != 0) { return 0; } item->prize = value; strncpy(item->name, line1, LINESIZE - 1); item->name[LINESIZE - 1] = '\0'; return 1; } int main() { char search_input[LINESIZE]; char normalized_search[LINESIZE]; struct pizza jedalny_listok[MAX_PIZZAS]; int count = 0; int matched = 0; printf("Zadaj hladanu surovinu:\n"); if(fgets(search_input, sizeof(search_input), stdin) == NULL) { fprintf(stderr, "Chyba pri načítavaní vyhľadávacieho reťazca.\n"); return 1; } search_input[strcspn(search_input, "\n")] = '\0'; normalize_string(normalized_search, search_input); printf("Zadaj jedalny listok:\n"); while(count < MAX_PIZZAS && read_pizza(stdin, &jedalny_listok[count])) { count++; } for(int i = 0; i < count; i++) { char normalized_name[LINESIZE]; normalize_string(normalized_name, jedalny_listok[i].name); if(search_string(normalized_name, normalized_search) != -1) { printf("%s\n%.2f\n", jedalny_listok[i].name, jedalny_listok[i].prize); matched++; } } printf("Nacitanych %d poloziek.\n", count); return 0; }