Символы (Char) Методы структуры Char
Переменную можно объявить специальным символьным типом – Char. Под символом мы понимаем любую букву, цифру, знак препинания или другой знак на клавиатуре и не только на клавиатуре.
В первом приближении можно считать, что символ – это строка длины 1. Объявим для примера две переменные:
Dim s As String = "Ш"
Dim c As Char = "Ш"
В большинстве случаев вследствие неявного преобразования типов эти две переменные ведут себя одинаково.
Методы структуры Char. В пространстве имен System имеется структура Char, обладающая рядом полезных методов для работы с символами. О них я уже говорил в 14.3.1. Сейчас просто повторюсь:
Dim Символ As Char = "Ж"
Debug.WriteLine("Набран символ " & Символ)
Debug.WriteLine("Это цифра? " & Char.IsDigit(Символ))
Debug.WriteLine("Это буква? " & Char.IsLetter(Символ))
Debug.WriteLine("Правда ли, что это буква или цифра? " & Char.IsLetterOrDigit(Символ))
Debug.WriteLine("Это строчная буква? " & Char.IsLower(Символ))
Debug.WriteLine("Это заглавная буква? " & Char.IsUpper(Символ))
Debug.WriteLine("Это знак препинания? " & Char.IsPunctuation(Символ))
Debug.WriteLine("Это пробел? " & Char.IsSeparator(Символ))
Debug.WriteLine("Превратить в строчную " & Char.ToLower(Символ))
Debug.WriteLine("Превратить в заглавную " & Char.ToUpper(Символ))
Вот что напечатает этот фрагмент:
Набран символ Ж
Это цифра? False
Это буква? True
Правда ли, что это буква или цифра? True
Это строчная буква? False
Это заглавная буква? True
Это знак препинания? False
Это пробел? False
Превратить в строчную ж
Превратить в заглавную Ж
Unicode символы. Переменная типа Char нынче занимает в памяти 2 байта, и поэтому в современной Windows насчитывается 65536 символов. Это так называемые Unicode символы. Они пронумерованы от 0 до 65535. Порядковый номер любого Unicode символа нам сообщает функция AscW модуля Strings. Функция же ChrW этого модуля наоборот – по номеру сообщает символ:
Функция |
Результат |
Пояснение |
AscW ("Ш") |
1064 |
Буква Ш имеет номер 1064 |
ChrW (1064) |
Ш |
Номер 1064 соответствует букве Ш |
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim Код As Long
Dim Символ As Char
For Код = 0 To 1200
Символ = ChrW(Код)
Debug.Write(Символ)
If Код Mod 64 = 0 Then Debug.WriteLine("")
Next
End Sub
Вот некоторые фрагменты из того, что будет распечатано этой процедурой:
!"#$%&'()*+,-./0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
{|}~¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿À
ÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿA
????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????
ЁЂЃЄЅІЇЈЉЊЋЌ?ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопр
стуфхцчшщъыьэюя?ёђѓєѕі
Вы видите здесь все цифры, знаки препинания, заглавные и строчные буквы латинского, греческого и русского алфавитов. А также видоизмененные латинские буквы для алфавитов некоторых стран Европы и мира. Если вы заберетесь дальше 1200-го символа, то увидите и арабскую вязь, и иероглифы, и другие алфавиты, и просто популярные значки:
? ? ? ? ? ?????????? ? ? ? ? ? ? ? ? ? ?
???????????????????? ?????????????????????????????????
?OO0???+?>?????????????????????????????
?????????????????????????????????????????
????????????? ¦??¦?¦¦???dd????
ASCII символы. Раньше переменная типа Char занимала в памяти 1 байт, и поэтому символов насчитывалось только 256. Они были сведены в так называемую ASCII-таблицу. Поскольку в нее нельзя было втиснуть все языки мира, то для разных стран символы таблицы со 128 по 255 могли быть разные. И сегодня мы можем по-старинке пользоваться ASCII-таблицей. В этом нам помогут две функции. Порядковый номер любого символа в ASCII-таблице нам сообщает функция Asc модуля Strings. Функция же Chr этого модуля наоборот – по номеру сообщает символ:
Функция |
Результат |
Пояснение |
Asc ("Ы") |
219 |
Буква Ы имеет номер 219 |
Chr (219) |
Ы |
Номер 219 соответствует букве Ы |
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim Код As Long
For Код = 32 To 255
Debug.Write(Chr(Код))
Next
End Sub
Вот что будет распечатано этой процедурой:
!"#$%&'()*+,-./0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕї
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя
Как видите, русские буквы (кириллица) расположены здесь совсем под другими номерами, чем в ипостаси Unicode символов.