Структуры данных - Строки

Содержание

Слайд 2

Символьные константы (литералы) Три формы записи символьных констант: Символ в апострофах

Символьные константы (литералы)

Три формы записи символьных констант:
Символ в апострофах ('a',

'W', '4', '?');
Знак # перед десятичным кодом символа ASCII (#97, #186, #254) – обычно для символов, отсутствующих на клавиатуре;
Буква, предваряемая знаком ^ (^M, ^V) – для представления управляющих символов (первые 32 символа ASCII) – код буквы на 64 больше кода управляющего символа (соответственно, 13, 22).

Форма записи символьных констант:
Один или несколько символов в апострофах ('a', 'W', '4', '?', 'vb').
- Двухсимвольные константы занимают 2а байта и имеют тип данных int;
- Для многобайтовых символов (для работы с набором символов требующих больше одного байта, например, Unicode) существует тип wchar_t - расширенный символьный. Эти константы записываются с префиксом L (wchart_t=wr; wr=L'A';);
Специальные символьные константы (ESC-последовательности) служат для представления специальных символов. Их отличительный признак символ обратной косой черты - \ (\n – новая строка, \" – кавычка, \0ddd – восьмеричная константа, \x0ddd – шестнадцатеричная).
Пустая символьная константа – недопус-тима.

И+ПРГ

Слайд 3

Элементы ЯПВУ. Таблица кодировки символов Символы с кодами 0 - 127 И+ПРГ

Элементы ЯПВУ.
Таблица кодировки символов
Символы с кодами 0 - 127

И+ПРГ

Слайд 4

Элементы ЯПВУ. Таблица кодировки символов Символы с кодами 128 - 255 И+ПРГ

Элементы ЯПВУ.
Таблица кодировки символов
Символы с кодами 128 - 255

И+ПРГ

Слайд 5

Задание: Выводить на экран код введенного символа, для завершения ввода ввести точку. И+ПРГ

Задание: Выводить на экран код введенного символа, для завершения ввода ввести

точку.

И+ПРГ

Слайд 6

Задание: Вывести на экран код введенного символа. Требуемый вид экрана: Введите

Задание: Вывести на экран код введенного символа. Требуемый вид экрана:
Введите символ.

Для завершения программы введите точку.
-> 1
Символ: 1 Код: 49 и т.д.

// Вывод кода введенного символа
#include
#include
void main()
{
char ch;
printf("\nВведите символ и нажмите Enter\n");
printf ("Для завершения программы введите точку.\n");
do
{
ch = getch();
printf("Символ: %c Код: %i\n",ch,ch);
}
while (ch != '.');
printf("\nДля завершения нажмите Enter\n");
getch();
}

(* Выводит код введенного символа *)
Program sym_cod;
Var sym: char;
code: integer;
begin
writeln ('Введите символ и нажмите Enter.');
writeln ('Для завершения программы введите точку и нажмите Enter.');
repeat
begin
write('-> ');
readln(sym);
code := Ord(sym);
writeln('Символ: ', sym,', Код: ', code);
end
until sym = '.';
end.

И+ПРГ

Слайд 7

В Pascal существует стандартный тип данных String - строка. var :

В Pascal существует стандартный тип данных String - строка.
var <имя_строки>:
string[[<длина>]]


[='<строка_инициализации>'];
Длина строки по умолчанию - 255 символов плюс нулевой символ, хранящий значение длины строки (всего 256 байт)
Можно определить собственный тип строки:
type <имя_типа>=string[[дл]];
Длина строки – константа или константное выражение.

Строка в С – это одномерный символьный массив с
нуль-символом - \0 в конце.
При объявлении размера такого массива надо к количеству символов строки добавлять одну позицию (байт) для нуль-символа.
Стандартного строкового типа и строковых переменных в С - нет.
Функции работы со массивами-строками собраны в заголовочном файле string.h.
В С++ для работы со строками определен класс string (изучите в ООП).
Главный недостаток – необходимо вручную проверять выход за границу строкового массива!

Строка – это конечная последовательность символов, цепочка символов.

И+ПРГ

Слайд 8

Type srt4 = string [4]; Const n = 5; Var s

Type srt4 = string [4];
Const n = 5;
Var
s :

string; (*строка 255 символов*)
s1 : str4; (*строка типа str4*)
s2 : string [n]; (*прямое описание*)
Инициализация строк – в разделе const:
Const s3 : string[6] = 'good';
Вид строки:

Примеры:

- 7 байт.

char str[6] = "good";
выделено 6 элементов массива (0÷5)

Оператор char str[ ] = "good"; - создаст и заполнит массив размерностью 5.

И+ПРГ

Слайд 9

Операции для строк присваивание строк := - при разной длине лишние

Операции для строк

присваивание строк := - при разной длине лишние

символы отбрасываются
type str4 = string[4];
var s1 = str4; s2 = string[10]
s2 := 'qwertyuiop';
s1 := s2; (* строка s1 содержит qwer *)
конкатенация + - склеивание (сцепление) строк
st1 := 'пар'; st2:= 'воз'; st := st1+'о'+st2;
обращение к компонентам строки
<имя_строки>[<индекс>]
{s='15.47'} c:= s[3]; {c='.'} cr:=s[2]; {cr='5'}
но в отличие от массива, нельзя напрямую заменять символы в строке.
операции отношения <, <=, >, >=, =, < > - сравнивают строки, из двух строк меньшая та, чей первый различный символ меньше.
'abc'<'xyz', 'a'<'abc', '120'<'45', 'Anny'<'anny'
ввод-вывод строк – имя строки может исп. в процедурах readln(s1, s2); и writeln(s1);
При вводе в строку считывается количество символов равное длине строки или меньше, если раньше встретиться команда Enter (LF+CR – перевод строки+возврат каретки).

поскольку строка в С – это массив, то над ними возможны все те же операции, что и над массивами, например, операция присваивания одной строки другой выполняется с помощью цикла или функций стандартной библиотеки.

И+ПРГ

Слайд 10

Функции и процедуры для строк Некоторые функции стандартных библиотек для работы

Функции и процедуры для строк

Некоторые функции стандартных библиотек для работы со

строками:
библиотека stdio.h
gets(s) - читает символ с клавиатуры в строку s до Enter, возвращает указатель на s.
puts(s) – выводит строку s на экран.
библиотека string.h
strcpy(s1,s2) – копирует s2 в s1,
strcat(s1,s2) – конкатенация s2 в конец s1,
strlen(s1) – возвращает длину строки s1,
strcmp(s1,s2) – сравнение строк, возвращает 0 (false), если s1 и s2 совпадают, отрицательное значение, если s1s2,
strchr(s1,ch) – ищет символ в строке, возвращает указатель на первое вхождение символа ch в строку s1,
strstr(s1,s2) – ищет подстроку в строке, возвращает указатель на первое вхождение строки s2 в строку s1,
и другие.

Формат функций и процедур работы со строками изучить самостоятельно!

Функции (возвращают простое значение)
Concat (s1[,s2,…,sn]) – последовательная кон-катенация s1, s2…sn,
Copy (s, start, len) – возвращает подстроку длиной len строки s, начиная позиции start (len и start – целого типа),
Length (s) – текущая длина строки s (тип byte),
Pos (substr, s) – ищет подстроку substr в стро-ке s и возвращает номер первого символа substr в s или 0, если такой подстроки в s нет.
Процедуры (возвращают преобразованную строку)
Delete (s, start, len) – удаляет подстроку длиной len из строки s, начиная с позиции start,
Insert (substr, s, start) – вставляет подстроку subst в строку s, начиная с позиции start,
Str (x, s) – преобразует числовое значение x в строку s (x может иметь формат – x:6:2),
Val (s, x, errcode) – преобразует строку s в числовое значение x, errcode содержит номер позиции первого ошибочного символа или 0.

И+ПРГ

Слайд 11

ASCIIZ-строки ASCIIZ-строки – это строки символов "с нулевым окончанием"- признак окончания

ASCIIZ-строки

ASCIIZ-строки – это строки символов "с нулевым окончанием"- признак окончания строки

- символ с нулевым кодом #0. Такие строки введены в Pascal для обеспечения возможности использовать длинные строки (до 65 535 символов) и для работы под Windows.
Для реализации механизма ASCIIZ-строк введен новый предопределенный тип данных PChar: Type PChar = ^char, т.е. указатель на символьное значение. Переменным типа PChar можно присваивать строковые значения, а также индексировать их, как при работе с символьными массивами. Переменная типа PChar ссылается на первый элемент некоторой ASCIIZ-строки неопределенной длины, завершающейся #0.

Для поддержки работы с ASCIIZ-строками используется специальный модуль (Uses) String. Он доступен в BP и BPW и содержит процедуры и функции для:
динамического создания и уничтожения строк (StrNew и StrDispose),
копирования строк (StrCopy, StrECopy, StrLCopy, StrPCopy, StrMove),
конкатенации строr (StrCat, StrLCat),
cравнения строк (StrComp),
и другие (StrIComp, StrLComp, StrLIComp, StrPos, StrIPos, StrScan, StrRScan, StrEnd, StrLen, StrLower, StrUpper, StrPas).

И+ПРГ