#include #include #include #define LINE_LEN 100 typedef struct { char name[LINE_LEN]; float price; } pizza; int get_line(char *name); int get_pizza(pizza *p_item); char decode(char t); int contain_substr(const char* menu_name, const char* target_name); int main() { printf("Zadaj hladanu surovinu:\n"); char target_name[LINE_LEN]; if (!get_line(target_name)) { exit(EXIT_FAILURE); } printf("Zadaj jedalny listok:\n"); pizza items[LINE_LEN]; int count = 0; while(get_pizza(items + count)) { // printf("%s\n", items[count].name); count++; } for(int i = 0; i < count; i++) { if (contain_substr(items[i].name, target_name)) { printf("%s\n", items[i].name); printf("%.2f\n", items[i].price); } } printf("Nacitanych %d poloziek.\n", count); return 0; } int get_line(char *name) { memset(name, 0, LINE_LEN); char* r = fgets(name, LINE_LEN, stdin); if (r == NULL || name[1] == 0) { return 0; } int n = strlen(name); if (name[n - 1] == '\n') name[n - 1] = 0; return 1; } int get_pizza(pizza *p_item) { int res = get_line(p_item->name); char price_string[LINE_LEN]; res += get_line(price_string); if (res != 2) return 0; sscanf(price_string, "%f", &(p_item->price)); return 1; } char decode(char t) { if(t >= 'A' && t <= 'Z') { return t - 'A' + 'a'; } char numbers[] = "0123456789"; char letters[] = "oizeasbtbq"; for (int i = 0; i < 10; i++){ if (t == numbers[i]){ return letters[i]; } } return t; } int contain_substr(const char* menu_name, const char* target_name) { int len_str = strlen(menu_name); int len_sub = strlen(target_name); for(int i = 0; i <= len_str - len_sub; i++) { int flag = 1; for(int j = 0; flag == 1 && j < len_sub; j++) { if (decode(menu_name[i + j]) != decode(target_name[j])) { flag = 0; } } if (flag) { return 1; } } return 0; }