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

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

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

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

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

Хочу организовать поиск по списку с помощью функции, в которую бы передавались: поле, по которому искать (собсно какая-то переменная из списка) и значение, которое искать. Никак не могу понять, как такое притворить в жизнь?
0
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++
В каких случая надо использовать ссылки и в каких указатели в качестве аргументов функции? В общем поняла, что и те и другие полезны для...

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

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

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

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

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

Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? - C++
Я конечно, понимаю, что на такие вопросы отвечают &quot;почитай книжку&quot;. Я читала, честное слово:) Конкретно. Есть функция void jacobi (...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.06.2013, 13:40
Ответ Создать тему
Опции темы

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