Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272

Поиск по ключевым словам

18.07.2010, 07:37. Показов 4334. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я использую функцию
C++
1
2
          if (_tcsstr(pBook->ptszWord, m_Find)=NULL)
        bFound = FALSE;
Можно так писать, просто у меня в этом месте происходит сбой.

Или можно по другому написать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2010, 07:37
Ответы с готовыми решениями:

Поиск по ключевым словам
Я создал таблицу в mysql под названием `search` с четырьмя столбиками `id`, `title`, `description`, `url`, и с помощью php уроков создал...

Поиск по ключевым словам
Здравствуйте! как сделать поиск файлов по ключевым словам? и чтобы эти ключевые слова читались из текстового документа (каждое слово с...

Поиск по ключевым словам
Добрый день имеется лог файл, в который записывается все, что набиралось на клавиатуре. Допустим этот файлик называется keydown.txt . Так...

20
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
18.07.2010, 08:16
Думаю можно.
http://msdn.microsoft.com/en-u... S.71).aspx

Поправка:
Ой... Извиняюсь. Для TCHAR есть только _tcsstr.
1
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
18.07.2010, 17:10
Не рекомендуется путать = и ==

a = b;

if( a == b )
0
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
18.07.2010, 19:39  [ТС]
А может быть проблема не в коде, который я создала, а в коде Visual C++, или например в асемблере?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 19:48
Цитата Сообщение от marina2 Посмотреть сообщение
А может быть проблема не в коде, который я создала, а в коде Visual C++, или например в асемблере?
да, с вероятностью 0,000001%
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
18.07.2010, 21:16
marina2, вам Том Ардер правильно указал на вашу ошибку
0
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
19.07.2010, 04:42  [ТС]
Дело не в этом,я исправила.

Когда программа находит нужное слово, все происходит нормально, а на следующем компоненте происходит сбой.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
19.07.2010, 08:18
marina2, так что за компонент? Код можно увидеть?
0
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
19.07.2010, 17:29  [ТС]
Имеется список элементов книги. Производится поиск по ключевым словам. Пользователь ввел слово в Edit и поиск проходит в соответствующих полях.



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
for(UINT nItem = 0; nItem < m_nBooksMapSize; nItem++)
{
    if(m_pBookdMap[nItem].pBookData)
    {
        pBook = m_pBookdMap[nItem].pBookData;
        if(pBook->dwParent)
        {
            pChapter = (PL_CHAPTER)pBook->dwParent;
            if(pChapter->ptszChapterDesc)
            {
                bFound = TRUE;
 
                if( pBook->ptszCaption && pFindData->ptszCaption)
                {
                    if(StrCmpNI(
                        pBook->ptszCaption, pFindData->ptszCaption, 
                        min(_tcslen(pBook->ptszCaption), 
                        _tcslen(pFindData->ptszCaption))) != 0)
                    //if(_tcsicmp(pBook->ptszCaption, pFindData->ptszCaption) != 0)
                    {
                        bFound = FALSE;
                                                
                    }
                }// if(bFound && pBook->ptszCaption && pFindData->ptszCaption)
 
                if(bFound && pFindData->ptszWord)
                {
                    CString m_Find=pFindData->ptszWord;
                    if (_tcsstr(pBook->ptszWord, m_Find)==NULL)
                        bFound = FALSE;
                }
            }
        }
    }
}
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
19.07.2010, 20:20
marina2, я так понимаю, что все переменные которые стоят в ифах - типа int или bool?
Сделайте проверку на NULL, вполне возможно что до этого вы где-то удалили объект
0
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
19.07.2010, 21:17  [ТС]
Нет.

Вот структура списка.

Компонент книга

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
typedef struct stChapter
{
    BYTE btDistrictNum;
    BYTE btMode;
    TCHAR * ptszChapterDesc;
    PL_BOOK_DATA pBooksHead;
    BYTE btChanged;
    DWORD dwBooksCount;
    stChapter * pNext;
} L_CHAPTER, * PL_CHAPTER;
 
Элементы книги
 
typedef struct stBook
{
    TCHAR * ptszAuthor;
    TCHAR * ptszCaption;
    UINT uiYear;
    TCHAR * ptszEdition;
    TCHAR * ptszCity;
    UINT uiPages;
    BYTE btSex;
    UINT uiNumber;
    TCHAR * ptszPeriod;
    TCHAR * ptszAux;
    TCHAR * ptszWord;
    BYTE btChanged;
    stBook * pNext;
    LONG_PTR dwParent;
} L_BOOK_DATA, * PL_BOOK_DATA;

А вот проекция в памяти этого списка
C
1
2
3
4
typedef struct stBookToBaseMap
{
    PL_BOOK_DATA pBookData;
} D_BOOK_TO_BASE, * PD_BOOK_TO_BASE;

По шагам проверяла, ничего не удаляется



Программа грохается в этом месте
Assembler
1
2
3
4
5
  mov     al,[edi]            ; al is next char from str1
 
  add     esi,1               ; increment pointer into str1
 
  cmp     al,dl
Добавлено через 19 минут
Может это происходит из-за того, что много элементов в базе?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
19.07.2010, 23:23
marina2, приаттачьте весь проект в архиве, я посмотрю
0
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
20.07.2010, 03:37  [ТС]
Вот. Мне кажется, там что-то с памятью.
Вложения
Тип файла: rar library1.rar (259.7 Кб, 18 просмотров)
0
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
21.07.2010, 14:58
Источник неприятностей с памятью может скрываться здесь (ИМХО):
C++
1
2
3
4
5
6
7
void CDistrictApp::RewriteCStringT(TCHAR * ptsBuffer, const TCHAR * ptsString, DWORD dwBufferLength)
{
....
            memset( ptsBuffer, 0, sizeof(TCHAR)*(dwBufferLength) );
            _tcsncpy_s(ptsBuffer, dwBufferLength, ptsString, nLength);
.....
}
ptsBuffer в такой конструкции может не содержать заключительного символа "конец строки" (== '\0'). Тогда в полях
C++
1
2
    TCHAR * ptszAuthor;
    TCHAR * ptszCaption;
и подобных им могут оказаться "лишние" символы.

Необходимо: в отладчике поставить точки прерывания и проверить содержимое подобных текстовых полей.
А в этом фрагменте кода я бы добавил:

C++
1
*(ptsBuffer + nLength) = '\0';
0
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
24.07.2010, 20:27  [ТС]
Ничего не выходит.

А что означает эти знаки: * &?

C++
1
TCHAR *& ptsBuffer
0
10 / 10 / 2
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
24.07.2010, 20:33
знаки & и * означают взять адрес и получить число расположеное по адресу
0
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
24.07.2010, 21:16  [ТС]
Когда они стоят рядом?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 22:35
Цитата Сообщение от marina2 Посмотреть сообщение
Когда они стоят рядом?
Нет, когда они стоят рядом - это бред.
& - взятие адреса.
* - разыменование указателя.
Данная тема есть в любой книге по С++.
1
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
31.07.2010, 13:19  [ТС]
*(ptsBuffer + nLength) = '\0'
Эта строчка совсем не компилируется. Когда по шагам проходишь код, компилятор его перепрыгивает.
А ведь все строчки оканчиваются нулевым символом.
0
5 / 5 / 0
Регистрация: 14.07.2010
Сообщений: 17
31.07.2010, 15:52
Не может быть, чтобы она не компилировалась)
Можно на крайний случай дописать *(char *)(ptsBuffer + nLength) = '\0'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.07.2010, 15:52
Помогаю со студенческими работами здесь

Поиск в БД по нескольким ключевым словам
Здравствуйте! Вот в чём вопрос: Пользователь видит большую таблицу, описывающую запчасти для авто. В базе данных у меня несколько...

Поиск файлов по ключевым словам(ву)
Народ может кто писал, кто может помоч реализовать программу для поиска файлов(txt,doc) по ключевому слову(словам).

Поиск слов по ключевым словам
Добрый вечер, имеется RichTextBox1 c текстом, из этого текста мне нужно вывысти КЛЮЧЕВЫЕ слова\подстроки в RichTextBox3. Ключевые слова...

Поиск на страницах по ключевым словам
Доброго времени суток форумчане. Недавно начал знакомится с php (ввиду изучения я его в университете), столкнулся с задачей написать 2...

Javascript поиск по ключевым словам
Задача такая стоит: есть 2 фрейма, в первом - любая веб страница, а во втором - можно ввести некое ключевое слово и надо, чтобы по нажатию...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru