![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
ANT1 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
Пожалуйста помогите.
Задание: Подсчитать сколько раз встречается каждый символ в заданной строке, представленной в виде последовательности символов. Также: нельзя использовать циклы, а нужно использовать алгоритмы стандартной библиотеки. Вот, что написал я. Но здесь подсчёт введённого с клавиатуры символа, а мне именно нужно подсчитать кол-во каждого символа в строке.
Добавлено @ 13:25 Скорей всего здесь понадобится ассоциативный массив. Модератор: не забываем пользоваться кнопочкой "Код" Это сообщение отредактировал(а) bsa - 11.6.2010, 13:45 |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
я бы решал через массив счетчиков. Где индексом массива служил бы код символа. Это самое быстро работающее решение. Но за это надо платить памятью. Можно через std::map - памяти будет кушаться меньше (для малого набора разных символов), но скорость доступа уже будет не константной, а логарифмической...
|
|||
|
||||
ANT1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
А можете привести реализацию через контейнер: ассоц-й массив? А то у меня не получается.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Как-то так:
Это сообщение отредактировал(а) bsa - 11.6.2010, 16:37 |
|||
|
||||
ANT1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
Что-то сложновато написано. А можно произвести доработку по моему примеру? Например оставить полностью класс шаблон и функцию ввода. Скопировать из контей-ра список в контейнер ассоц-й массив. Потом произвести обработку( изменить ф-ии: обработки и вывода ).
Добавлено через 2 минуты и 18 секунд И если возможно, то с комментариями, был бы очень благодарен. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
СЛОЖНО?!?
![]() куда уж проще! IncCounter - функтор, который увеличивает счетчик соответствующий символу. И ТОЛЬКО! PrintCounter - функтор, который выводит элемент ассоциативного контейнера в поток. И ТОЛЬКО! содержимое main() должно быть понятно без комментариев. |
|||
|
||||
ANT1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
Мне ваш код непонятен вообще. откуда тип struct? откуда секция public, если нет класса? Можете переделать именно мой вариант, т.к. ваш я не могу понять? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
причем тут public? у меня в коде этого нет.
struct от class отличается только тем, что struct по умолчанию public, а класс - private. Мой код от твоего отличается использованием STL. Раз не понимаешь этот код, значит ты не знаешь язык. А лезть в шаблоны не зная основ языка - глупо. |
|||
|
||||
ANT1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
т.е. можно написать 2 класса, вместо структур?
Может всё-таки сделаете построчные комментарии? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Это сообщение отредактировал(а) bsa - 11.6.2010, 17:21 |
|||
|
||||
ANT1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
Большое спасибо. Запустил, работает.
Только захотел строку вручную вводить, уже после пробела почему-то не считает.
Можете объяснить, как осуществляется поиск? И что это такое: explicit? Модератор: не забываем пользоваться кнопочкой "Код" Это сообщение отредактировал(а) bsa - 11.6.2010, 18:20 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
читаем внимательно документацию на потоковый ввод. Там черным по белому написано, что оператор >> читает только СЛОВО (т.е. то, что между пробельными символами)! Если тебе надо читать строку, используй getline, описание - в документации.
Какой поиск?!? Если ты про ассоциативный контейнер, то "поиск" зашит в него. Строчка 14 моего кода (++ccm_[c]). Читаем документацию на map explicit - это запрет компилятору преобразования {Class x = y} в {Class x(y)}. |
|||
|
||||
ANT1 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
Уважаемый bsa вот я переделал немного ваш код, и разбил его на загол. файл и файл реализацию:
//value_type
Вы не могли бы мне объяснить пошагово работу программы в выделенных строчках? Именно глубоко, а то я её не допонимаю. Я бы был вам очень благодарен.И ещё как можно доработать функтор увеличения счётчика до класса шаблона? Модератор: СКОЛЬКО РАЗ МОЖНО УЖЕ ПОВТОРЯТЬ ПРО КНОПКУ "КОД"?!? Это сообщение отредактировал(а) bsa - 11.6.2010, 22:48 |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Извини, я не могу тебе объяснить азы языка. У меня на это нет времени. Купи книжку.
про for_each написано тут: http://www.cplusplus.com/reference/algorithm/for_each/ |
|||
|
||||
ANT1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 11.6.2010 Репутация: нет Всего: нет |
Тогда скажите для чего нужно: value_type,typedef.
Как происходит именно подсчёт одинаковых символов? Почему мы в качестве счётчика устанавливает size_t, а не конкретный тип данных при создании контейнера? А first и second итераторы на символы и счётчики( мы их используем при выводе)? Скажите пожалуйста. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |