UCOZ Реклама


Алгоритмы обработки символьной информации



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

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.

Команда присваивания вырезке 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$ обмениваются своими значениями.

Пример 1 на QBasic: Определить число букв а в слове.

CLS
INPUT "введите предложение "; s$
FOR I = 1 TO LEN(s$)
IF MID$(s$, I, 1) = "а" THEN k = k + 1
NEXT I
PRINT "количество букв а= ", k
END

Функция UCase

Функция ucase преобразует все строчные буквы в символьной строке в заглавные.

Синтаксис функции:

UCase (символьнаяСтрока)

Например:

cComment = "вывод"

Print UCase(cComment) ' Возвращает "ВЫВОД"

Print UCase$(cComment) ' Возвращает "ВЫВОД"

Пример 2 на QBasic: Перевести строчные буквы слова в заглавные.

CLS
INPUT "Ведите слово"; W$
PRINT UCASE$(W$)
END


Содержание:
Типовые задачи на символьные массивы

Hosted by uCoz