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

Содержание

Слайд 2

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

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

Слайд 3

Символы Скольки-значный должен быть код для представления одного символа текста? A…Z

Символы

Скольки-значный должен быть код для представления одного символа текста?
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

Кодировка Windows CP1251

Слайд 5

Кодировка Unicode 128…65535 (16 бит)

Кодировка Unicode

128…65535 (16 бит)

Слайд 6

Символы в C#. Примеры // объявление и инициализация char a, b;


Символы в 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,

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

// объявление и инициализация
string s1, s2, s3;
s1 =

"";
s2 = "7"; // не эквивалентно '7'
s1 += "Привет, ";
s3 = s1 + s2 + "!\r\nПока!";
textBox1.Text = s3;

// сравнение строк
if (s1 == s2)
MessageBox.Show("Ура!");
bool SuperUser;
if (s3 == "Admin")
SuperUser = true;
else
SuperUser = false;

// длина строки, посимвольный просмотр, переворот
for (int i = 0; i < s1.Length; i++)
s2 = s1[i] + s2;

// поcимвольный просмотр, переворот
foreach(char x in s1)
s2 = x + s2;

Слайд 8

Строки в C#. Подстроки // поиск подстроки string s = textBox1.Text;


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

// поиск подстроки
string s = textBox1.Text;
int p =

s.IndexOf("Вася");
if (p == -1)
MessageBox.Show("А про Васю ничего!");
else
MessageBox.Show("Вася с "+(p+1)+"-го символа!");

// выделение подстроки
string s1 = "Дано: x = -3,1415; y = 0,5. Найти z.";
int p1 = s1.IndexOf("x = ");
int p2 = s1.IndexOf(";", p1);
string s2 = s1.Substring(p1+4, p2-p1-4);
double x = Convert.ToDouble(s2);

// вставка подстроки
string s1 = textBox1.Text;
string s2 = textBox2.Text;
int p = s1.IndexOf(s2);
if (p != -1)
textBox3.Text = s1.Insert(p, "НаШёЛ->");

Слайд 9

Кодировка Unicode // посмотреть все возможные символы string s = "";

Кодировка 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 c in s)
if (c >= '0' && c <= '9')
z += "(" + x[c - '0'] + ")";
else
z += c;
textBox2.Text = z;

Слайд 11

string s = textBox1.Text; // удаление подстроки «, так сказать, »

string s = textBox1.Text;
// удаление подстроки «, так сказать, »
s =

s.Replace(", так сказать, ", "");
// замена воскл. знаков на точки
s = s.Replace("!", ".");
// замена подстроки на подстроку
s = s.Replace("редиска", "нехороший человек");
textBox2.Text = s;

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

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

Слайд 12

// разбить текст в тех местах, где стоят знаки .?! string

// разбить текст в тех местах, где стоят знаки .?!
string s

= textBox1.Text;
// заводим массив символов-разделителей
char[] x = { '.', '?', '!' };
// разбиваем строку s
string[] r = s.Split(x);
// r – массив строк, не содержащих .?!

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

// массив символов-разделителей вводит пользователь
string s = textBox1.Text;
char[] x = textBox2.Text.ToCharArray();
string[] r = s.Split(x);
// полученные строки выводим в столбик
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 =

string s = textBox1.Text.ToLower();
string x = "аеёиоуыэюя";
int count = 0; //

кол-во гласных в тексте
foreach(char c in s)
foreach(char v in x)
if (c == v)
{
count++;
break;
}
label3.Text = Convert.ToString(count);

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

string s = textBox1.Text.ToLower();
char[] x = { 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' };
int count = 0;
for(int pos = -1; ; count++)
{
pos = s.IndexOfAny(x, pos + 1);
if (pos == -1) break;
}
label3.Text = Convert.ToString(count);

string s = textBox1.Text.ToLower();
char[] x = { 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' };
string[] r = s.Split(x);
label3.Text = Convert.ToString(r.Length - 1);