![]() |
|
|
![]()
|
|
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Помогите написать код подсчета количества одинаковых строк и определения начальной позиции данной строки в списке.
Есть ListBox, в котором находятся данные типа: АА АА АА АА АБ АБ АБ АВ АГ АГ АД ЕЕ ЕЕ КР КР МО МО ПС Необходимо в EditBox вывести данные таким образом: АА - позиция 0, кол-во 4; АБ - позиция 4, кол-во 3; АВ - позиция 7, кол-во 1; АГ - позиция 8, кол-во 1; АД - позиция 10, кол-во 1; ЕЕ - позиция 11, кол-во 2 ....... и т.д. Данные уже отсортированы, затруднение вызывает написание кода подсчета. Спасибо. |
|||
|
||||
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Это надо было, чтобы узнать начальный индекс данной строки и количество.
На самом деле все немного сложнее. В проекте есть ListCtrl, в котором 2 столбца - Серия и Номер например ЖХ 222222 ЖЦ 222223 ЖЦ 333333 ЖЦ 222221 ЖЦ 444440 ЖЦ 344444 ЖЦ 322222 ЖЦ 311111 ЖЧ 332222 ЖЧ 355555 ЖЧ 111111 ЖЧ 355555 ЖЧ 322221 ЖЧ 355555 ЖЧ 355554 ЖЧ 355553 ЖЧ 366666 ЖЧ 366667 ЖЧ 366669 ЖЧ 366668 ЖЧ 300000 ЖЧ 363910 ХЩ 295363 в первом столбце данные уже отсортированы по алфавиту, и нужно отсортировать данные во втором столбце соответственно внутри СЕРИИ Вот две функции
Сама функция сортировки PuzirikSort работает правильно, если указывать числовые значения в ее параметрах, а если использовать переменные pos и count то часть данных просто изчезает, а вместо них появляются дубликаты имеющихся. Посмотрите, в чем проблемы. На всякий случай прикрепляю файл с проектом. В папке ДЕБАГ есть текстовые файлики с данными для загрузки. Присоединённый файл ( Кол-во скачиваний: 6 )
NewMark.rar 63,28 Kb |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 1 Всего: 15 |
avatara, я не понял, что тебе нужно: решить задачу с сортировкой самому, или просто, чтобы было всё отсортировано. Если второе - лучше воспользоваться готовыми алгоритмами, типа sort. Или другими контейнерами, в которых такая сортировка происходит автоматически, на этапе заполнения, например, map. Например, в твоей функции OnBnClickedButton1 можно написать что-то вроде
Здесь я, правда, дважды поленился: если используется не одна CString, а какая-нибудь структура, то для неё нужно определить операцию "меньше", чтобы использовать map. И лучше, по соображениям эффективности, использовать дополнительный класс - указатель на структуру, чтобы уменьшить число операций копирования. Если это интересно, я могу позже (когда будет свободное время) написать этот фрагмент с учётом этих замечаний. |
|||
|
||||
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Да, нужно чтобы все было отсортировано - СЕРИИ по алфавиту и НОМЕРА по возрастанию внутри серии. Серии уже отсортированы и нужно сортировать только номера в серии.
Сортировать можно как угодно, хоть собстренную делать сортировку, хоть использовать стандартные метоты. Я не очень силен в программировании и с контейнером map еще невстречался. Делаю проект MFC application в Visual Studio 2003.net подскажите Какие инклюды сделать чтобы Ваш пример заработал. |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 1 Всего: 15 |
Нужно добавить
В самой функции я специально первую и последнюю строчки привёл из оригинала, чтобы проще можно было определить, что на что поменять. Других изменений вроде я не делал. |
|||
|
||||
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Сделал, все заработало, за исключением одного НО.
Серии стали сортироваться в другом порядке. В программе серии должны отсортированы согласно украинского алфавита а б в г ґ д е є ж з і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь Поэтому в исходном файле, который загружается в программу, такая сортировка уже сделана по сериям согласно украинскому алфавиту В данном случае при загрузке файла с данными происходит пересортировка серий. И в результате серии с начальными буквами Є, Ї, І становятся в самом начале списка, т.е. нарушается порядок следования букв в алфавите. |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
||||
|
||||
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Был бы очень рад, заодно и поучился бы правильно делать такое. |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 1 Всего: 15 |
avatara, я, честно говоря, не силён в украинском, увидел какие-то чудные буковки, но не придал этому значения. Возможно, для украинского пройдёт такой вариант
Я как-то и не в состоянии проверить, правильно ли после этого работает. А сама идея с определением операции меньше здесь продемонстрирована, просто здесь - сравнение с учётом украинской (мне так кажется, ни разу до этого не делал |
|||
|
||||
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
По MSDN нашел какие надо сделать инклюды (в stdafx.h)
Выдает ошибки error C2146: syntax error : missing ';' before identifier 'locale' error C2501: '_locale_t' : missing storage-class or type specifiers error C2501: 'locale' : missing storage-class or type specifiers error C3861: '_create_locale': identifier not found, even with argument-dependent lookup Несилен я в STL, простите. |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 1 Всего: 15 |
avatara, это мой недосмотр, забыл дописать, что нужно добавить
|
|||
|
||||
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Те же самые ошибки выдает.
|
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 1 Всего: 15 |
Странно, а хэлп что выдаёт? У меня сейчас нет под рукой 2003-й, делал в 2005-й, подключал в NewMarkDlg.cpp, никаких ошибок не выдаётся, в справке указано:
попробуй сделать Rebuild |
|||
|
||||
| avatara |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.5.2004 Репутация: нет Всего: нет |
Rebuild не помог, сегодня дома поставлю 2005-ю Студию и попробую.
Спасибо еще раз. |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 1 Всего: 15 |
avatara, вот версия файла, чтобы работал в 2003-й VS
Присоединённый файл ( Кол-во скачиваний: 6 )
NewMarkDlg.cpp 7,16 Kb |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |