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

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

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

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

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

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

Использование массивов в качестве аргументов функции - C++
Написала программу, работает правильно, только не совсем по условию задачи. Помоги пожалуйста исправить. Условие: найти наибольшую...

Указатели или ссылки (в качестве аргументов функции) ? - C++
В каких случая надо использовать ссылки и в каких указатели в качестве аргументов функции? В общем поняла, что и те и другие полезны для...

Ostream и ofstream в качестве аргументов полиморфной функции - C++
Здравствуйте! Перегрузил оператор << с ostream и ofstream для пользовательского класса. ofstream &operator << (ofstream &output,...

Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов - C++
Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве её аргументов. Если аргумент только один,...

Дан файл, переписать его в обратном направлении, передавая имена файлов в качестве аргументов функции main - C++
Здравствуйте! Помогите, пожалуйста! Дан файл, переписать его в обратном направлении, передавая имена файлов в качестве аргументов функции...

Указатели на массивы в качестве аргументов - C++
Помогите пожалуйста а то вообще идей никаких нет( Напишите функцию поиска минимального элемента в динамическом двухмерном массиве...

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

И еще, на досуге, орфографический словарь почитайте. Чтобы не "притворять в жизнь"
Jazzis
1 / 1 / 0
Регистрация: 27.05.2013
Сообщений: 15
12.06.2013, 10:59  [ТС]     Идентификаторы списка в качестве аргументов функции #3
Спасибо за ответ и совет. Возник вопрос, что такое значение ключа?
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 13:40     Идентификаторы списка в качестве аргументов функции
Еще ссылки по теме:

Константные указатели в качестве аргументов функций - C++
Вскрылся вот такой пробел в знаниях/понимании. Итак, есть предположим однонаправленный список (в общем без разницы что). struct TNode {...

Как передать пути в качестве аргументов приложению? - C++
Здравствуйте. Как запускать приложения в дебагере VS с параметрами? Как передать пути приложению, запуская его другим приложением....

С++ Тема «Указатели и динамические массивы. Использование указателей в качестве аргументов функций» - C++
В целочисленном массиве Х(N) удалить все элементы, расположенные между макси-мальным и минимальным элементами. Найти среднее арифметическое...

Нюансы синтаксиса и семантики: ссылки, указатели и массивы в качестве аргументов функций - C++
Перенесено из этой темы. Чтобы вернуть указатели почему вот здесь не надо приводить janr к типу указателя char* на выходе? char*...

Написать функцию, имеющую одну реализацию, но принимающую в качестве аргументов разные типы - C++
Хочу написать независимый от библиотеки код. В библиотеке есть класс А, а у меня В. У них абсолютно одинаковая реализация. И будет не...

Написать функцию, возвращающую максимальное из двух целых чисел, полученных в качестве аргументов - C++
1)Написать функцию, которая возвращает максимальное из двух целых чисел, полученных в качестве аргумента. (функции) #include &lt;iostream.h&gt;...


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

Или воспользуйтесь поиском по форуму:
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 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     Идентификаторы списка в качестве аргументов функции
Ответ Создать тему
Опции темы

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