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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
#1

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

10.06.2013, 20:35. Просмотров 289. Ответов 5
Метки нет (Все метки)

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

Указатели на массивы в качестве аргументов C++
C++ Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов
Написать функцию, возвращающую максимальное из двух целых чисел, полученных в качестве аргументов C++
C++ Указатели или ссылки (в качестве аргументов функции) ?
C++ Константные указатели в качестве аргументов функций
C++ Дан файл, переписать его в обратном направлении, передавая имена файлов в качестве аргументов функции main
Ostream и ofstream в качестве аргументов полиморфной функции C++
C++ Как передать пути в качестве аргументов приложению?
C++ Использование массивов в качестве аргументов функции
Написать функцию, имеющую одну реализацию, но принимающую в качестве аргументов разные типы C++
C++ С++ Тема «Указатели и динамические массивы. Использование указателей в качестве аргументов функций»
Нюансы синтаксиса и семантики: ссылки, указатели и массивы в качестве аргументов функций C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
Нарушитель
3129 / 1904 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 1
10.06.2013, 22:44     Идентификаторы списка в качестве аргументов функции #2
Делаете функцию-итератор - проход по всему списку. Передаете ей значение ключа и указатель на функцию сравнения. Для каждого элемента списка, итератор вызывает функцию сравнения этого элемента с ключом.

И еще, на досуге, орфографический словарь почитайте. Чтобы не "притворять в жизнь"
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
12.06.2013, 10:59  [ТС]     Идентификаторы списка в качестве аргументов функции #3
Спасибо за ответ и совет. Возник вопрос, что такое значение ключа?
gazlan
Нарушитель
3129 / 1904 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 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
Нарушитель
3129 / 1904 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 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     Идентификаторы списка в качестве аргументов функции
Ответ Создать тему
Опции темы

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