Алгоритмы обработки символьной информации (Введение)

Символьная информация - это информация, отображаемая  
с помощью символов (букв, цифр, знаков операций и др.).
IBM-совместимые компьютеры обрабатывают 256 различных символов, каждый из которых кодируется одним байтом.

Соответствие символов и байтов задается таблицей кодировки, в которой для каждого символа указывается соответствующий байт.

Символы с кодами от 0 до 127 построены по стандарту ASCII (American Standard Code for Information Interchange - Американский стандартный код обмена информацией,  читается  "аски"). Вторая половина таблицы (коды 128 ... 255) в нашей стране содержит русские буквы (кириллицу) и символы псевдографики.
 

Коды 0...127 

(кодировка ASCII) 


Коды 128...255 
(модифицированный 
альтернативный вариант) 


Для того, чтобы определить по этим таблицам код того или иного символа, нужно сложить номер строки с номером столбца, в которых он расположен. Так, код цифры 5 равен 05+048 = 053.

Символьная информация в алгоритмах и программах описывается данными двух типов: символьным и литерным. Они отличаются друг от друга тем, что значением символьной переменной является один символ, а литерной - строка символов.

Типы данных, используемые для обработки

символьной информации

Язык Тип, ключевое слово Примеры использования
Школьный 
АЯ
Символьный 
сим
  a:=" f " ; b:="+" ; c:="5" 
  If  a="  " then k:=k+1 
Литерный 
лит
 t:="Литерная величина" 
 s:=" " (пустая строка) 
Turbo Pascal Символьный 
Char
 a:=' f ' ; b:='+' ; c:='5' ; 
 If a='  ' then k:=k+1 
Литерный 
String
 t:='Литерная величина' ; 
 f:=' ' ; (пустая строка) 
QBasic Литерный  t$:="Литерная величина" 
 f$:=" " (пустая строка)


Для данных символьного и литерного типов применимы операции сцепки (соединения, конкатенации) и сравнения (<, >, <=, >=, =, <>).
Сравнивать можно строки разной длины. Сравнение осуществляется слева направо в соответствии с ASCII-кодами соответствующих символов.
Так, строка "стол" меньше строки "стул", строка "teacher" больше строки "pupil", а строка "А" меньше строки "АВ".

 

Функции и команды обработки строк


Школьный АЯ

Функция длин(S) Возвращает количество символов в строке S.

Операция вырезка позволяет "вырезать" из строки группу соседних символов. Вырезка из строки S подстроки, начинающейся с i-ой и кончающейся j-ой позицией, обозначается S [ i : j]. Вырезка из строки S одного i-го символа обозначается S[i].

Команда присваивания вырезке S[N : M] := SubS. Часть строки S, начиная с позиции N и кончая позицией M, заменяется на подстроку SubS такой же длины.
 
 
Turbo Pascal

Процедуры

Delete(Var S:String; N,M:Integer) Удаляет M символов из строки S, начиная с позиции N.

Insert(SubS: String; Var S:String; N:Integer) Вставляет подстроку SubS в строку S, начиная с позиции N.

Str(X:Integer; Var S:String) Возвращает представление числа X в его символьной форме S.

Val(S:String; Var X, Code: Integer) Возвращает представление символов строки S в ее числовой форме X. Параметр Code содержит признак ошибки преобразования (если Code = 0, ошибки нет).

Функции

Chr(X:Byte): Char Возвращает символ с заданным порядковым номером X.

Сoncat(S1[, S2, ..., SN]): String Выполняет сцепку (конкатенацию) последовательности строк.

Copy(S: String; N,M: Integer): String Возвращает подстроку из строки S, начиная с позиции N и длиной M символов.

Length(S: String): Byte Возвращает количество символов в строке S.

Ord(X: Char): LongInt Возвращает порядковый номер символа X в таблице кодов символов.

Pos(SubS, S: String): Byte Возвращает номер позиции, начиная с которой в строке S располагается подстрока SubS (если значение функции равно нулю, то S не содержит SubS).

QBasic

Функции

ASC(X$) Возвращает порядковый номер символа X$ в таблице кодов символов.

CHR$(N) Возвращает символ с заданным порядковым номером N.

INSTR([N,] X$,Y$) Возвращает номер позиции строки X$, начиная с которой в ней размещается подстрока Y$. Если подстрока не найдена, то значение функции равно нулю. Поиск подстроки ведется с позиции N, а если N не задано, то с начала строки.

LEFT$(X$,N) Возвращает подстроку, составленную из первых N символов строки X$.

LEN(X$) Возвращает количество символов в строке X$.

MID$(X$,N [,M]) Возвращает подстроку, составленную из M символов строки X$, начиная с позиции N (если параметр М опущен, то возвращаются  все символы, начиная с позиции N).

RIGHT$(X$,N) Возвращает подстроку, составленную из последних N символов строки X$.

STR$(N) Возвращает представление числа N в символьной форме.

VAL(X$) Возвращает представление символов строки X$ в числовой форме.

Операторы

MID$(X$,N,M) = Y$ Часть строки X$, начиная с позиции N, длиной M позиций заменяется на строку Y$. Длина X$ не изменяется.

SWAP X$,Y$ Строки X$ и Y$ обмениваются своими значениями.

Другие записи

10.06.2016. Пример 7.1. Определить количество слов в заданном тексте.
Если слова в тексте разделены одним пробелом, то задача сводится к подсчету числа пробелов. Количество слов при этом равно числу пробелов плюс 1. Если же число пробелов между соседними словами произвольное,…
10.06.2016. Пример 7.2. Определить, является ли заданное слово "перевёртышем" (слово называется "перевёртышем", если совпадает с собой после переворачивания).
Система тестов N теста Данные Результат 1 Slovo = ''казак'' Otvet = ''Перевертыш'' 2 Slovo = ''коза'' Otvet = ''Не перевертыш'' Школьный АЯ алг Перевертыш (арг лит…
10.06.2016. Пример 7.3. B заданном тексте одно заданное слово везде заменить на другое заданное слово такой же длины.
Тест Данные Результат Текст Слово1 Слово2 ''2sinx+siny'' ''sin'' ''cos'' ''2cosx+cosy'' Школьный АЯ алг Замена (арг рез лит Текст, арг лит Слово1, Слово2)   дано…
10.06.2016. Пример 7.4. Заданную последовательность слов переупорядочить в алфавитном порядке (то есть выполнить лексикографическое упорядочение).
Тест Данные Результат Words=(''стул'', ''гора'', ''яма'', ''стол'')   Words=("гора", "стол", "стул",  "яма") Школьный АЯ   (АЯ расширен добавлением типа данных лит таб   и…