Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
3 / 3 / 2
Регистрация: 10.11.2013
Сообщений: 175

Form приложение. Поиск по имени

18.05.2014, 00:54. Показов 943. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
короче ребят. делаю курсовую по программированию!вот наткнулся на проблему!



вот база данных курсовой!
я делаю код для поиска по имени!
я использую вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
sportsmen w;
vector<sportsmen>::iterator heh;
strcpy(w.name,Edit6->Text.t_str());
heh=find(sport.begin(),sport.end(),w);
if(heh==sport.end())
{
 ShowMessage(" по вашему запросу ничего ненашло ");return;
}
back=heh-sport.begin();
ShowRecord();
по итератору! но выводит мне какие казяблики в столбцах всех!((
вопрос: как ещё можно обойти этот поиск без итератора,или с итератором ! помогите! зарание спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2014, 00:54
Ответы с готовыми решениями:

Поиск файлов по части имени \ имени
var SR: TSearchRec; Folder: String; begin Folder := 'D:\'; Folder := IncludeTrailingPathDelimiter(Folder); if...

Создать приложение windows form
Вообщем есть задание: Дан вещественный массив A Заменить каждый нулевой элемент главной диагонали максимальным элементом побочной...

Создать приложение Windows Form
Добрый день! Помогите, пожалуйста, с заданием. Написала код на С#, представляющий собой парсер сайтов в консольном приложении: ...

11
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.05.2014, 10:33
Функция find - не волшебная палочка, она не в курсе, по имени ты там ищешь или по отпечаткам пальцев. Она сравнивает элементы последовательности целиком, используя их оператор ==.

Поэтому используют предикаты. Можно взять search с бинарным предикатом, либо просто проходить циклом по множеству без всяких функций поиска. Помимо этого надо еще учитывать, что совпадений может быть более одного.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
template < class t, class f_iter1, class bin_pred, class container >
void find_all( f_iter1 _begin, f_iter1 _end, const t & _val, bin_pred _pred, container & _res )
{
    // так:
    t val[ ] =
    {
        _val
    } ;
    for ( ; ( _begin = std::search( _begin, _end, val, val + 1, _pred ) ) != _end; ++_begin )
    {
        _res.push_back( * _begin );
    }
 
    // или так:
//  for ( ; _begin != _end; ++_begin )
//  {
//      if ( _pred( *_begin, _val ) )
//      {
//          _res.push_back( * _begin );
//      }
//  }
}
 
struct record
{
    std::string name;
 
    unsigned age;
 
    record( std::string _name, unsigned _age ) :
        name( _name ),
        age( _age )
    {
    }
} ;
 
bool record_pred_by_name( const record & r1, const record & r2 )
{
    return ( r1.name == r2.name );
}
 
bool record_pred_by_age( const record & r1, const record & r2 )
{
    return ( r1.age == r2.age );
}
 
// ---------------------------------------------------------------------------
int _tmain( int argc, _TCHAR * argv[ ] )
{
    typedef std::vector < record > t_recs;
 
    t_recs recs, group;
    record target( "nick", 0 ), target2( "", 12 );
 
    recs.push_back( record( "nick", 12 ) );
    recs.push_back( record( "nick2", 30 ) );
    recs.push_back( record( "nick", 31 ) );
    recs.push_back( record( "nick2", 12 ) );
    recs.push_back( record( "nick3", 12 ) );
 
    find_all( recs.begin( ), recs.end( ), target, record_pred_by_name, group );
    for ( t_recs::iterator it( group.begin( ) ), end( group.end( ) ); it != end; ++it )
    {
        cout << it->name << "\t" << it->age << endl;
    }
 
    group.clear( );
    cout << "\n\n";
 
    find_all( recs.begin( ), recs.end( ), target2, record_pred_by_age, group );
    for ( t_recs::iterator it( group.begin( ) ), end( group.end( ) ); it != end; ++it )
    {
        cout << it->name << "\t" << it->age << endl;
    }
}
Миниатюры
Form приложение. Поиск по имени  
0
3 / 3 / 2
Регистрация: 10.11.2013
Сообщений: 175
18.05.2014, 18:38  [ТС]
блин нихрена не пойму(((

Добавлено через 44 секунды
Цитата Сообщение от BRcr Посмотреть сообщение
Функция find - не волшебная палочка, она не в курсе, по имени ты там ищешь или по отпечаткам пальцев.
у меня с числовым полем работает!!
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.05.2014, 19:54
Старайся понять - и поймешь. Если чего не понятно - спрашивай конкретно.
А вот разжевывать кашку и ложить тебе в рот... ну, так-то и получше занятия найдутся.
0
3 / 3 / 2
Регистрация: 10.11.2013
Сообщений: 175
18.05.2014, 22:38  [ТС]
ну для чего тогда существует функция поиска в контейнере!???

Добавлено через 15 секунд
зачем find???

Добавлено через 1 минуту
и ответь на вопрос!? почему с числовыми полями все работает!? а с этим нет
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.05.2014, 22:54
Цитата Сообщение от ник нэйм Посмотреть сообщение
ну для чего тогда существует функция поиска в контейнере!???
Добавлено через 15 секунд
зачем find???
Цитата Сообщение от BRcr Посмотреть сообщение
Функция find - не волшебная палочка, она не в курсе, по имени ты там ищешь или по отпечаткам пальцев. Она сравнивает элементы последовательности целиком, используя их оператор ==.

Цитата Сообщение от ник нэйм Посмотреть сообщение
и ответь на вопрос!? почему с числовыми полями все работает!? а с этим нет
Пример в студию.
0
3 / 3 / 2
Регистрация: 10.11.2013
Сообщений: 175
18.05.2014, 23:08  [ТС]
я и операцию == для name в классе перегрузил((
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.05.2014, 23:46
Можно сколь угодно сокрушаться по поводу недостаточности предпринятых усилий, но результат от этого не изменится - твой код не работает. Поэтому придется включить мозг и заставить себя понять, что пошло не так и что нужно исправить.

Цитата Сообщение от ник нэйм Посмотреть сообщение
я и операцию == для name в классе перегрузил((
Показывай уже код, хватит патетики.
0
3 / 3 / 2
Регистрация: 10.11.2013
Сообщений: 175
19.05.2014, 00:14  [ТС]
friend bool Forname (const sportsmen&a,const sportsmen&b)
{return a.name == b.name;}
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.05.2014, 10:20
Это не перегрузка операции сравнения, это предикат. Здесь все норм.
Как объявлена переменная name? Не как массив char, случаем?
0
3 / 3 / 2
Регистрация: 10.11.2013
Сообщений: 175
20.05.2014, 21:06  [ТС]
да char ((( и чё

Добавлено через 46 секунд
это дружественная перегрузка == для поля name

Добавлено через 5 минут
я уже сделал сам!) вот
i - имя итератора;
i=find_if(итерат1,итерат2,bind2nd(ptr_fu n(имя дружественной перегруженой функции),исомое));
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
20.05.2014, 21:19
Цитата Сообщение от ник нэйм Посмотреть сообщение
да char ((( и чё
И то, что так просто сравнивать нельзя.
a.name == b.name - это сравнение указателей на массивы, а не элементов массивов. По логике вещей в твоей программе они и не могут никогда быть одинаковыми. Для сравнения таких строк есть функции типа strcmp().
Цитата Сообщение от ник нэйм Посмотреть сообщение
я уже сделал сам!) вот
i - имя итератора;
i=find_if(итерат1,итерат2,bind2nd(ptr_fu n(имя дружественной перегруженой функции),исомое));
Тоже норм решение. Даже лучше, чем создание массива из одного элемента для search(), на мой взгляд.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2014, 21:19
Помогаю со студенческими работами здесь

Преобразование из ConsoleApllication в Form приложение
Здравствуйте. С горем пополам написал сие чудо using System; using System.Collections.Generic; using System.Linq; using...

Переделать консольное приложение в Windows Form
Хочу признаться вам , совершенно не дружу с формами , для КП нужно к этому сделать Windows Form надеюсь на вашу помощь using System; ...

Переделать консольное приложение в Windows Form
Имеет консольное приложение, выполняющее построение гистограммы в Excel, нужно перевести его в windows form, помогите пожалуйста, только...

Доработка формы (Form) в приложение Lotus
В существующей базе лотус нужно доработать форму, и так чтобы можно было тестировать с данными и так что бы пользователь не видел мои...

Связать консольное приложение и windows form
Написал консольное приложение. Добавил форму. Как их связать?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru