Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6.DOC
Скачиваний:
0
Добавлен:
09.11.2018
Размер:
100.86 Кб
Скачать

6.3. Строковый тип

Для удобства работы с массивами символов в языке Турбо Паскаль введен строковый тип STRING .

При описании переменных строкового типа указывается максимальная длина строки n. Максимально возможная длина строки n = 255 символов.

Примеры описаний:

CONST n = 50;

VAR a : STRING[n];

b : STRING .

Для строки a максимальное количество символов - 50, для строки b- 255.

Каждой компоненте величины типа STRING отводится один байт. Нумерация элементов - от единицы. Нулевой байт содержит информацию о фактическом количестве символов в строке .

Над данными строкового типа возможны операции конкатенации и отношения.

Операция конкатенации обозначается знаком "+" и реализует объединение строк. Например, в результате выполнения операторов:

a:='начало';

b:=a + '*добавка';

WriteLn((b)

будет отпечатано

начало*добавка.

Для операций отношения действуют следующие правила: а) более короткая строка считается меньше длинной; б) если длины сравниваемых строк равны, то происходит поэлементное сравнение символов этих строк с учетом упорядоченности в списке ASCII.

При выполнении присваивания a := b происходит перепись символов из строки a в строку b в количестве, не превышающем n - максимального размера строки a . Заметим, что при выполнении поэлементных присваиваний, например, a[k]:='z' , не происходит корректировка значения текущей длины строки даже если символ 'z' будет записан после последнего символа.

Для работы со строками язык Турбо Паскаль имеет несколько стан-дартных функций и процедур.

Функция Length(st:STRING):integer

возвращает значение текущей длины строки st.

Функция Concat(S1,S2...Sn:STRING): STRING

выполняет слияние строк S1,S2...Sn (аналог операции конкатенации)

Функция Copy(st:STRING; nom:integer; kol:integer):STRING

возвращает подстроку, выделенную из строки st длиной kol символов, начиная с символа с номером nom .

Процедура Delete(VAR st:STRING; nom:ineger; kol:integer)

удаляет из строки st подстроку длиной kol символов, начиная с символа с номером nom .

Процедура Insert( st:STRING; VAR stn:STRING; nom:integer)

вставляет строку st в строку stn, начиная с символа с номером nom.

Процедура Pos( st:STRING; stn:STRING):byte

производит поиск подстроки st в строке stn. Результат - номер позиции под-строки st в строке stn. Если подстрока не найдена то результат равен нулю.

Пример 6.3.1. Демонстрация работы со строками .

PROGRAM Strdemo;

CONST n=50;

VAR a,b,St : STRING[n];

k,kp : integer;

BEGIN

{ Ввести две строки символов (a,St) }

Write('Строка a : '); ReadLn(a);

Write('Строка St : '); ReadLn(St);

{ В строке "a" подсчитать количество символов "+" }

kp:=0;

FOR k:=1 TO n DO

IF a[k]='+' THEN kp:=kp+1;

WriteLn('Количество "+" = ', kp);

{ Записать в строку "b" все прописные буквы } { латинского алфавита из строки "a" }

b:=''; { пустая строка }

FOR k:=1 TO Length(a) DO

IF (a[k]>='A') AND (a[k]<='Z') THEN b:=b+a[k];

WriteLn('Получилась строка:', b);

{ "Вычистить" строку St, оставив в ней только буквы } { русского алфавита и круглые скобки }

FOR k:=Length(St) DOWNTO 1 DO

CASE St[k] OF

'А'..'Я' , 'а'..'п' , 'р'..'с' , '(' , ')' :

ELSE Delete(St,k,1)

END;

WriteLn('Результат:', St);

{ А теперь перед каждой открывающей скобкой вставить } { звездочку, а после закрывающей - точку }

FOR k:=Length(St) DOWNTO 1 DO

CASE St[k] OF

'(' : Insert('*', St , k);

')' : Insert('.', St , k+1)

END;

WriteLn('После обработки:', St)

END.

В двух последних случаях длина строки в процессе обработки изме-няется, поэтому для правильной работы программы приходится перемещать-ся по строке справа налево .

Задачи

6.3.1. В строке символов подсчитать количество букв латинского ал-фавита.

6.3.2. Выяснить, имеется ли в строке хотя бы один символ “#“ .

6.3.3. Выполнить зеркальное отображение строки символов относи-тельно середины (т.е. перевернуть строку, не строя новой).

6.3.4. В строке определить номер позиции, в которой впервые встре-чается символ "+".

6.3.5. Имеется массив слов (массив строк, в каждой строке - одно слово). Выявить все слова-перевертыши (например: кок, потоп).

6.3.6. Имеется массив фраз. Выявить все фразы-перевертыши (напри-мер: а роза упала на лапу Азора).

6.3.7. Подсчитать, сколько раз в строке символов встречается каждая буква латинского алфавита.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]