Форум программистов, компьютерный форум CyberForum.ru

Идентификаторы списка в качестве аргументов функции - C++

Восстановить пароль Регистрация
 
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
10.06.2013, 20:35     Идентификаторы списка в качестве аргументов функции #1
Хочу организовать поиск по списку с помощью функции, в которую бы передавались: поле, по которому искать (собсно какая-то переменная из списка) и значение, которое искать. Никак не могу понять, как такое притворить в жизнь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 20:35     Идентификаторы списка в качестве аргументов функции
Посмотрите здесь:

Указатели на массивы в качестве аргументов C++
C++ Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов
Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? C++
C++ Указатели или ссылки (в качестве аргументов функции) ?
C++ Константные указатели в качестве аргументов функций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2861 / 1809 / 272
Регистрация: 27.08.2010
Сообщений: 4,896
Записей в блоге: 1
10.06.2013, 22:44     Идентификаторы списка в качестве аргументов функции #2
Делаете функцию-итератор - проход по всему списку. Передаете ей значение ключа и указатель на функцию сравнения. Для каждого элемента списка, итератор вызывает функцию сравнения этого элемента с ключом.

И еще, на досуге, орфографический словарь почитайте. Чтобы не "притворять в жизнь"
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
12.06.2013, 10:59  [ТС]     Идентификаторы списка в качестве аргументов функции #3
Спасибо за ответ и совет. Возник вопрос, что такое значение ключа?
gazlan
2861 / 1809 / 272
Регистрация: 27.08.2010
Сообщений: 4,896
Записей в блоге: 1
12.06.2013, 13:07     Идентификаторы списка в качестве аргументов функции #4
Цитата Сообщение от Jazzis Посмотреть сообщение
поле, по которому искать
Это и есть значение ключа
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
13.06.2013, 09:56  [ТС]     Идентификаторы списка в качестве аргументов функции #5
Переделал я функцию, теперь в нее передается только само поле. Выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void search (char* db)
{
    char i[150];
    cout << "Enter a string for search: ";
    cin >> i;
    struct List *curr;
    curr = head;
    while  (curr != NULL)
    {
        cout << "db == " << db << endl;
        if (strcmp(db, i)==0)
        {
            printf("%d %s\n",curr->person.data,db);
        }
        curr = curr->next;
    }
}
Но я не могу понять как правильно ей передать поле, по которому надо искать. Если делаю db как struct List, то ругается на то, что не может конвертировать char в List*. Если делаю char* как сейчас, то db всегда равен последнему элементу списка, а попытка указать db, где первый элемент приводит к ошибке (ругается что db типа char*, а head типа List*).
Передаю такой вот аргумент:
C++
1
search(db->person.fio);
Т.к. структуры у меня объявлены таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct Person {
    int data;
    int id;
    char* fio;
    int age;
    char* prof;
    char* party;
    int number;
    bool sud;
};
 
struct List 
{
    Person person; 
    struct List *next; 
} *head = NULL;
gazlan
2861 / 1809 / 272
Регистрация: 27.08.2010
Сообщений: 4,896
Записей в блоге: 1
13.06.2013, 13:40     Идентификаторы списка в качестве аргументов функции #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool Compare(Person* pItem,Person* pKey)
{
   return strcmp(pItem->StrField,pKey->StrField);
}
 
Person   Key;
 
memset(&Key,0,sizeof(Key));
 
Key.SmthField = MyValue;
 
foreach(/* in the List */)
{
   if (!Compare(pItem,&Key))
   {
      DoSmth();   
   }
}
Yandex
Объявления
13.06.2013, 13:40     Идентификаторы списка в качестве аргументов функции
Ответ Создать тему
Опции темы

Текущее время: 00:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru