Отправляет email-рассылки с помощью сервиса Sendsay

[prg] C++. поиск подстроки не с начала

Здравствуйте, уважаемые!

Нашел в интернете работающий пример с использованием функции GetDlgItemText
и метода find для строки класса string. Вот фрагмент работающего кода уже в
моей программе:

// нажимаем кнопку "Найти"
case IDC_BUTTON9: {
HWND hwndList = GetDlgItem(hDlg, IDC_LIST1);
// очищаем listbox
SendDlgItemMessage(hDlg, IDC_LIST1, LB_RESETCONTENT, 0,0);
// создаем буфер для текста из окна редактирования edit2
TCHAR findBuf[32];
GetDlgItemText(hDlg, IDC_EDIT2, findBuf, 32);
string needle=findBuf;
bool bFindRes=0;
// перебираем все строки
for (int i=0; i < MainBookList.size(); ++i) {
// если подстрока найдена
if (!MainBookList[i].title.find(needle)) {
bFindRes=1;
// добавляем в listbox новую строку
int pos = (int)SendMessage(hwndList, LB_ADDSTRING, 0,
(LPARAM)MainBookList[i].title.c_str());
SendMessage(hwndList, LB_SETITEMDATA, pos, (LPARAM)i);
// выводим в окне редактирования edit1 для этой строки текст
TCHAR editBuf[1024];
StringCbPrintf (editBuf, ARRAYSIZE(editBuf), TEXT(": %s, : %s, : %s
()\r\n%s\r\n%s"), MainBookList[i].number.c_str(),
MainBookList[i].quantity.c_str(), MainBookList[i].kilobytes.c_str(),
MainBookList[i].diktor.c_str(), MainBookList[i].description.c_str());
SetDlgItemText(hDlg, IDC_EDIT1, editBuf);
}
}
return true;
}

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

Грызунов Александр. Самара.

Ответить   Sun, 30 Mar 2014 13:26:03 +0400 (#2988659)

 

Ответы:

Приветствую всех.

...

К сожалению, кое-кто пренебрегает чтением документации, а иначе знал бы, что
метод string::find() возвращает позицию иголки в стоге сена. Таким образом,
вышепроцитированное выражение с if как раз и фильтрует только те совпадения,
которые начинаются с нулевого символа.
Для ваших нужд код надо изменить так:
if (string::npos != MainBookList[i].title.find(needle)) {
...

Ответить   "i_chay" Sun, 30 Mar 2014 15:31:19 +0300 (#2988766)