Поиск в структуре по разным полям - C (СИ)
Формулировка задачи:
Доброго времени суток.
Нужна небольшая консультация. Задание стандартное, работа со структурой. И одним из пунктов идет поиск.Собственно с реализацияй поиска и возник вопрос. Поиск надо реализовать по каждому отдельному полю, но писать для полей одного типа отдельный алгоритм мне кажется не рационально. Поэтому я хотел бы реализовать одну единственную функцию поиска, а уже в функцию передавать переменную которой было бы присвоено имя определенного поля.
Но к сожелению не знаю как организовать обращение к определенному полю через параметр, поэтому подскажите как именно это сделать.
П.С.: Кода всей программы и самой функции поиска не надо, нужен синтаксис обращения к полю. Если конечно такое возможно в С.
... struct str{char a; char b;char c; void search(char s);}*list; ... char <переменная>; ... void search(char s){ ... list-><переменная>; ... }
Решение задачи: «Поиск в структуре по разным полям»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> struct x { char a; char b; char c; }; void FindPrint(struct x *p, size_t size, int c, int (*fp)(struct x *, int)); int first(struct x *p, int c); int second(struct x *p, int c); int third(struct x *p, int c); /* searchs structures for characters in different fields and prints them */ int main(void) /* ANSI C89 */ { struct x chs[10] = { { 'a', 'b', 'c' }, { 'a', 'b', 'c' }, { 'a', 'b', 'c' }, { 'a', '0', 'c' }, { 'a', '0', 'c' }, { 'a', '0', 'c' }, { 'a', 'b', '#' }, { 'a', 'b', '#' }, { 'a', 'b', '#' }, { '.', 'b', 'c' } }; char c; c = '.'; FindPrint(chs, 10, c, first); c = 'b'; FindPrint(chs, 10, c, second); c = 'c'; FindPrint(chs, 10, c, third); exit(EXIT_SUCCESS); } void FindPrint(struct x *p, size_t size, int c, int (*fp)(struct x *, int)) { size_t i; printf("print for '%c'" "\n", c); for (i = 0; i < size; i++) if (fp(p+i, c) == 1) printf( "%c %c %c" "\n", (p+i)->a, (p+i)->b, (p+i)->c ); } int first(struct x *p, int c) { return p->a == c; } int second(struct x *p, int c) { return p->b == c; } int third(struct x *p, int c) { return p->c == c; }
Объяснение кода листинга программы
- Структура данных, используемая в программе, - это структура
x
, которая содержит три поля типаchar
:a
,b
иc
. - Программа содержит три функции:
first
,second
иthird
, которые сравнивают структуруx
по полямa
,b
иc
соответственно с заданным символом. - Функция
FindPrint
принимает указатель на массив структурx
, размер этого массива, символ для поиска и функцию сравнения в качестве параметров. - Функция
FindPrint
использует циклfor
для прохода по всем элементам массива структурx
. - Внутри цикла функция
fp
вызывается для каждой структуры в массиве. - Если функция
fp
возвращает1
, то это означает, что текущая структура удовлетворяет условию поиска, и ее поля выводятся на экран с помощью функцииprintf
. - В функции
main
создается массив структурx
с 10 элементами, инициализированными различными значениями. - Затем программа вызывает функцию
FindPrint
три раза, передавая разные символы для поиска и разные функции сравнения. - В результате выполнения программы на экран выводятся все структуры, удовлетворяющие условиям поиска.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д