Участник
- Статус
- Оффлайн
- Регистрация
- 23 Фев 2017
- Сообщения
- 612
- Реакции
- 504
Видел несколько тем с генерацией случайных строк, где в качестве "алфавита" (т.е символы, которые используются для генерации) используется массив типа char.
Но верна ли такая реализация? - Безусловно, так судить я не могу, потому что каждое решение проблемы является верным, если оно решает проблему.
Но я готов рассказать про более изящный метод, для которого нам понадобится тот самый алфавит в нашем компьютере - ASCII.
ASCII (American standard code for information interchange) - набор символов (т.е алфавит), где каждый символ сопоставлен с числовым значением от 0 до 255 (всего 256 значений).
Алфавит состоит из:
Чтобы получить порядковый номер надо сделать все с точностью до наоборот:
Теперь взглянем на всю таблицу, для этого мне пришлось завести не большой цикл:
Вот output:
А теперь перейдем к интересностям:
Эта таблица очень удобна и практична, когда задача касается строк.
Но верна ли такая реализация? - Безусловно, так судить я не могу, потому что каждое решение проблемы является верным, если оно решает проблему.
Но я готов рассказать про более изящный метод, для которого нам понадобится тот самый алфавит в нашем компьютере - ASCII.
ASCII (American standard code for information interchange) - набор символов (т.е алфавит), где каждый символ сопоставлен с числовым значением от 0 до 255 (всего 256 значений).
Алфавит состоит из:
- Десятичных цифр
- Английский алфавит
- Национальный алфавит (В моем случае русский)
- Знаки препинания
- И прочие...
Код:
int num = 55; //Порядковый номер
cout << (char)num << endl; //Приводим к char и получаем символ
Чтобы получить порядковый номер надо сделать все с точностью до наоборот:
Код:
char ch = 'a';
cout << (int)ch << endl;
Теперь взглянем на всю таблицу, для этого мне пришлось завести не большой цикл:
Вот output:
А теперь перейдем к интересностям:
- Если вы скомпилируете и запустите этот код, то при выводе таблицы вы услышите звук винды. Среди символов в этой таблице есть и ЗВУК.
- Можно заметить, что цифры, большие и маленькие лат. буквы идут друг за другом.
Что означает, что такую прелесть можно использовать в тех самых генераторах случайной строки:
(Функция получения случайных чисел с заданными границами, функция получилась кривой)
Вот в этом коде явно отражено использование этой таблицы:
Ну и вот что получаем:
- Так же можно делать проверки, если символ из только нижнего регистра:
Код:if(symbol >= 'a' && symbol <= 'z') //ПК сам превратит все в int, сравнит и даст верный результат
Эта таблица очень удобна и практична, когда задача касается строк.
Последнее редактирование:
