Программирование на языке высокого уровня
Встроенные типы данных C#
Символы
Кодировка Windows CP1251
Кодировка Unicode
Символы в C#. Примеры
Строки в C#. Примеры
Строки в C#. Подстроки
Кодировка Unicode
Константный массив строк
Строки в C#. Удаление, замена подстроки и прочее
Строки в C#. Метод Split
Пример: подсчёт гласных букв в тексте
Домашнее задание
1.32M
Категория: ПрограммированиеПрограммирование

Символы. Кодировки. Строки. Массивы строк

1. Программирование на языке высокого уровня

Богатов Р.Н.
Программирование
на языке высокого уровня
Лекция 9.
Символы. Кодировки. Строки. Массивы строк
Кафедра АСОИУ ОмГТУ, 2012

2. Встроенные типы данных C#

Тип
Диапазон значений
Размер
(байт)
sbyte
-128 … 127
1
byte
0 … 255
1
short
-32 768 … 32 767
2
ushort
0 … 65 535
2
int
-2 147 483 648 … 2 147 483 647
4
uint
0 … 4 294 967 295
4
long
8
ulong
-9 223 372 036 854 775 808 …
9 223 372 036 854 775 807
0 … 18 446 744 073 709 551 615
float
±1,5·10-45 … ±3,4·10+38, точность – 7 разрядов
4
double
±5,0·10-324 … ±1,7·10+308, точность – 16 разрядов
8
decimal
±1·10-28 … ±7,9·10+28, точность – 28 разрядов
16
bool
true или false
1
char
0 … 65 535 (код символа)
2
8

3. Символы

• Скольки-значный должен быть код для представления одного
символа текста?
• A…Z a…z 0…9 "!?.,:;№_-+*/%\=<>(){}[]@#$^&~|’
– это 27+27+10+32+… ≥ 96 символов
• 6 бит = 64 значения
7 бит = 128 значений
8 бит = 256 значений
• Изначальная идея: один символ – один байт. Коды 0…127 –
основной набор символов, коды 128…255 – для национального алфавита.
• ASCII – базовая 7-битовая кодировка для латинского алфавита и
основных символов. Кириллические кодировки (CP866, Windows CP1251,
KOI8-R и другие) отличаются только размещением русских букв в диапазоне
кодов 128…255.

4. Кодировка Windows CP1251

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
Ђ
Ѓ

ѓ






Љ

Њ
Ќ
Ћ
Џ
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
!
"
#
$
%
&
'
(
)
*
+
,
.
/
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
ђ






˜

љ

њ
ќ
ћ
џ
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Ў
ў
Ј
¤
Ґ
¦
§
Ё
©
Є
«
¬
®
Ї
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
°
±
І
і
ґ
µ

·
ё

є
»
ј
Ѕ
ѕ
ї
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
А
Б
В
Г
Д
Е
Ж
З
И
Й
К
Л
М
Н
О
П
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Р
С
Т
У
Ф
Х
Ц
Ч
Ш
Щ
Ъ
Ы
Ь
Э
Ю
Я
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
а
б
в
г
д
е
ж
з
и
й
к
л
м
н
о
п
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
р
с
т
у
ф
х
ц
ч
ш
щ
ъ
ы
ь
э
ю
я

5. Кодировка Unicode

128…65535 (16 бит)

6. Символы в C#. Примеры

// объявление и инициализация
char a, b;
a = '7';
textBox1.Text += a;
b = (char)55;
textBox1.Text += b;
// посмотреть кодировку ASCII
// результат одинаковый
for (int i = 1; i < 256; i++)
textBox1.Text += (char)i;
// посмотреть кодировку Unicode
for (int i = 1; i < 65536; i++)
textBox1.Text += (char)i;
// не запускайте –
// работает слишком долго :о(

7. Строки в C#. Примеры

// объявление и инициализация
string s1, s2, s3;
// сравнение строк
s1 = "";
s2 = "7"; // не эквивалентно '7'
if (s1 == s2)
s1 += "Привет, ";
MessageBox.Show("Ура!");
s3 = s1 + s2 + "!\r\nПока!";
textBox1.Text = s3;
bool SuperUser;
if (s3 == "Admin")
SuperUser = true;
else
SuperUser = false;
// длина строки, посимвольный
просмотр, переворот
// поcимвольный просмотр,
переворот
for (int i = 0; i < s1.Length; i++)
s2 = s1[i] + s2;
foreach(char x in s1)
s2 = x + s2;

8. Строки в C#. Подстроки

// поиск подстроки
string s = textBox1.Text;
// выделение подстроки
int p = s.IndexOf("Вася");
if (p == -1)
string s1 = "Дано: x = -3,1415; y = 0,5. Найти z.";
MessageBox.Show("А про Васю ничего!");
else
int p1 = s1.IndexOf("x = ");
// свставка
подстроки
MessageBox.Show("Вася
"+(p+1)+"-го
символа!");
int p2 = s1.IndexOf(";", p1);
string s1 = textBox1.Text;
string s2 = s1.Substring(p1+4, p2-p1-4);
string s2 = textBox2.Text;
double x = Convert.ToDouble(s2);
int p = s1.IndexOf(s2);
if (p != -1)
textBox3.Text = s1.Insert(p, "НаШёЛ->");

9. Кодировка Unicode

// посмотреть все возможные символы
string s = "";
for (int i = 1; i < 65536; i++)
s += (char)i;
textBox1.Text = s;
посмотреть
// всё-равно долго//
работает
:о/ все возможные символы
char[] a = new char[65536];
for (int i = 0; i < 65535; i++)
a[i] = (char)(i+1);
textBox1.Text = new string(a);
// работает быстро,
// ...но TextBox'у потом тяжело

10. Константный массив строк

Задача: заменить в тексте каждую цифру на её название, взятое в скобки.
Например, текст «Мне 18 лет» должен преобразоваться в «Мне (один)(восемь) лет».
string s = textBox1.Text;
string z = "";
foreach(char c in s)
switch (c)
{
case '1':
z += "(один)";
break;
case '2':
z += "(два)";
break;
...
case '0':
z += "(ноль)";
break;
default:
z += c;
break;
}
textBox2.Text = z;
string s = textBox1.Text;
string z = "";
string[] x = new string[] { "ноль", "один",
"два", "три", "четыре", "пять", "шесть",
"семь", "восемь", "девять" };
foreach(char
if (c >=
z +=
else
z +=
c in s)
'0' && c <= '9')
"(" + x[c - '0'] + ")";
c;
textBox2.Text = z;

11. Строки в C#. Удаление, замена подстроки и прочее

string s = textBox1.Text;
// удаление
подстроки
«, так сказать, »
string
s = textBox1.Text;
s = s.Replace(", так сказать, ", "");
s = s.Replace("0", "(ноль)");
// заменаs воскл.
знаков на точки
= s.Replace("1",
"(один)");
s = s.Replace("!",
".");
s = s.Replace("2",
"(два)");
s = s.Replace("3", "(три)");
// заменаs подстроки
на подстроку
= s.Replace("4",
"(четыре)");
s = s.Replace("редиска",
"нехороший
человек");
s = s.Replace("5",
"(пять)");
s = s.Replace("6", "(шесть)");
textBox2.Text
= s;
s = s.Replace("7",
"(семь)");
s = s.Replace("8", "(восемь)");
s = s.Replace("9", "(девять)");
textBox2.Text = s;

12. Строки в C#. Метод Split

// разбить текст в тех местах, где стоят знаки .?!
string s = textBox1.Text;
////заводим
символов-разделителей
массив массив
символов-разделителей
вводит пользователь
char[]
'.', '?', '!' };
stringx s= ={ textBox1.Text;
char[] x = textBox2.Text.ToCharArray();
// разбиваем строку s
string[]
string[]r r= =s.Split(x);
s.Split(x);
////r полученные
– массив строк,
содержащих
.?!
строкиневыводим
в столбик
textBox3.Text = "";
foreach(string a in r)
textBox3.Text += a + "\r\n";
label4.Text = Convert.ToString(r.Length);

13. Пример: подсчёт гласных букв в тексте

string s = textBox1.Text.ToLower();
string x = "аеёиоуыэюя";
int count = 0; // кол-во гласных в тексте
foreach(char c in s)
foreach(char v in x)
string s = textBox1.Text.ToLower();
if (c == v)
char[] x = { 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' };
{
count++;
int count = 0;
break;
for(int pos = -1; ; count++)
}
{
pos = s.IndexOfAny(x, pos + 1);
label3.Text = Convert.ToString(count);
if (pos == -1) break;
}
string s = textBox1.Text.ToLower();
char[]= xConvert.ToString(count);
= { 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' };
label3.Text
string[] r = s.Split(x);
label3.Text = Convert.ToString(r.Length - 1);

14. Домашнее задание

Решить задачу с помощью массива строк. Определить, в каком
квадранте или на какой оси координат находится точка, заданная
пользователем.
Если ответ имеет вид «Точка (x0; y0) находится …», то можно использовать
массив строк с вариантами ответов: «на оси OY», «на оси OX», «в III
квадранте», «в II квадранте», «в IV квадранте», «в I квадранте».
English     Русский Правила