Задачка для программистов

 
Допустим есть некоторый текст, скажем "Война и мир" Толстова. Стоит задача посчитать сколько раз используется каждая буква.
Решение в лоб и самое неэффективное - создать массив из 33 элементов, условится что номер элемента совпадает с номером буквы ( Массив[0] = "А") и перебрав весь текст получить ответ. Но если для нас важен регистр, то элементов уже будет не 33 а больше, а если текст не на русском языке ? И если вдруг автор произведения решил не использовать к примеру букву "У" а мы зарезервируем для неё место, что тоже неэффективно и ко всему прочему есть условие - нам нельзя создавать массив где номер элементов имеет соответствие номеру буквы. 
Вот похожую задачу мне надо решить средствами MQL5. Самый просто вариант это как-то сделать так: Увидел букву А и написал так: Массив[А]++, (это вариант 1) но в мкл индексами массива может выступать только целое число, поэтому ищем дальше. Следующий вариант это использовать структуру, тогда будет так. Структура.A++(это вариант 2) В этом случае мне нужно создать некую динамическую структуру, которой я к тому же должен также динамически присвоить имя элемента, и на сколько я знаю в мкл это тоже задача нерешаемая.
Вопрос - как реализовать вариант 1 или вариант 2 ? Или всё же придётся по старинке - перебором в лоб ?
 
Alexey Oreshkin:
Допустим есть некоторый текст, скажем "Война и мир" Толстова. Стоит задача посчитать сколько раз используется каждая буква.
....

Для этого придуманы ассоциативные массивы https://www.mql5.com/ru/articles/1334#intro

Еще их называют hash-tables. 

Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
  • 2015.03.23
  • Vasiliy Sokolov
  • www.mql5.com
В данной статье описывается специальный алгоритм, позволяющий эффективно получать доступ к элементам по их уникальному ключу. В качестве ключа может быть использован любой базовый тип данных, например ключом могут быть строки или целочисленные переменные. Такой контейнер данных принято называть словарем или ассоциативным массивом. С его помощью решать многие задачи становиться гораздо проще и эффективней.
 
Alexey Volchanskiy:

Для этого придуманы ассоциативные массивы https://www.mql5.com/ru/articles/1334#intro

А я всё думал для кого эта статья ? ) Спасибо, сейчас гляну.
 
Alexey Oreshkin:
А я всё думал для кого эта статья ? ) Спасибо, сейчас гляну.
Для вас)) В качестве ключа надо использовать букву, а в поле значения писать число ее включений.
 
Если обозначить каждую букву цифрой, А-11, Б-12 и т.д то в дальнейшем можно будет использовать операторы >=<  и, например, легче искать слова  начинающиеся с буквы к. 
 

По аски коду символа. Массив 256 элементов, если хотите, чтобы быстро работало. А саму войну и мир придется перебирать по буквам, тут никуда не денешься.

Экономить здесь нечего, массив лонгов в 256 элементов, это мизер.

На финальной стадии, если надо, то просуммировать количества разных регистров. 

 
Alexey Oreshkin:

Вопрос - как реализовать вариант 1 или вариант 2 ? Или всё же придётся по старинке - перебором в лоб ?
Если вы посмотрите какие задачи решают школьники 8-10 классов на международных олимпиадах, то поймете что это детская задачка.  :)
 
Petros Shatakhtsyan:
Если вы посмотрите какие задачи решают школьники 8-10 классов на международных олимпиадах, то поймете что это детская задачка.  :)
Дык то школьники, а в нашей местной псих. больнице средняя температура ниже нуля ))
 
Dmitry Fedoseev:

По аски коду символа. Массив 256 элементов, если хотите, чтобы быстро работало. А саму войну и мир придется перебирать по буквам, тут никуда не денешься.

Экономить здесь нечего, массив лонгов в 256 элементов, это мизер.

На финальной стадии, если надо, то просуммировать количества разных регистров. 

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

 
Alexey Volchanskiy:
Дык то школьники, а в нашей местной псих. больнице средняя температура ниже нуля ))
Алексей, вы самокритичны ))
 
Igor Volodin:
Алексей, вы самокритичны ))

Это что, вот когда я был Наполеоном...)))

Насчет таблицы ASCII c 256 элементfvb. А что будете делать с текстом с китайскими иероглифами или многоязычном на Unicode? 

Причина обращения: