Последовательность не более чем из 255 символов
Перейти к содержимому

Последовательность не более чем из 255 символов

Запишите, как в языке Паскаль обозначается последовательность символов длиной меньше 255.

Как быстро выучить стихотворение наизусть? Запоминание стихов является стандартным заданием во многих школах.

Как научится читать по диагонали? Скорость чтения зависит от скорости восприятия каждого отдельного слова в тексте.

Как быстро и эффективно исправить почерк? Люди часто предполагают, что каллиграфия и почерк являются синонимами, но это не так.

Как научится говорить грамотно и правильно? Общение на хорошем, уверенном и естественном русском языке является достижимой целью.

Последовательность не более чем из 255 символов

Введение

Линейные алгоритмы

Алгоритмы с ветвлением

Алгоритмы с повторением

Одномерный массив (вектор)

Двумерный массив (матрица)

Пользовательские процедуры и функции

Строки

Множества

Записи

Файлы

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

Например, строкой является
В жизни всё закономерно

Следует знать, что Паскаль налагает на использование строк некоторые ограничения. Во-первых, их длина не может превышать 255 символов. Во-вторых, все строки в программе должны быть заключены в апострофы. Т.е.
‘Быть или не быть, вот в чем вопрос!’

И наоборот, все, что стоит между двумя апострофами, является строкой Например
‘a := sin(x) + 5.65’
тоже строка, а не оператор присваивания.

В строках могут использоваться любые символы, которые только Вы сумеете набрать на клавиатуре — даже русские буквы. Не может быть элементом строки только один символ, а именно апостроф. Причины понятны — он отмечает начало и конец строки.
В Паскале строка определяется как произвольная последовательность символов длиной не более 255 символов, заключенная в апострофы.

Тип строка в Паскале имеет два названия. Исторически первое выглядит так:
var s: packed array [1..50] of char;

(т.е. упакованный символьный массив). Впоследствии его заменили на более короткое и понятное:
var s: string[50];

( string в переводе строка). Можете пользоваться любым. Объявление строки максимальной (255) длины еще короче:
var s: string;

Тип string — уникальный в том смысле, что им можно пользоваться одновременно и как единым значением (так, как мы используем целую переменную), и как массивом. Этим строка отличается от простого (неупакованного) символьного массива. Такой массив — обыкновенный, и все ниже сказанное к нему не относится, хотя формально он тоже последовательность символов.
В типе string (но не packed array) элемент с номером 0 используется для хранения длины строки. Сами символы-элементы строки имеют номера от 1 до последнего.

В строке, объявленной как string[50], можно хранить строки любой длины, лишь бы она не превосходила 50-ти.

Работа со строками.

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

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

1. Присваивание строк. Присваивать можно любую строку любой, независимо от объявления. Необходимо только следить за тем, чтобы строка "влезла" в строковую переменную. Другими словами, если строковая переменная объявлена как string[50], нельзя запихнуть в нее строку из 100 символов. Также можно присвоить строковой переменной символьную (символ можно назвать строкой из 1-го элемента), но не наоборот. Пример присваивания:
s := ‘String переводится как строка’;

2. Сложение строк. Такое сложение называется конкатенацией или катенацией и применяется для соединения нескольких строк в одну. Например, после выполнения оператора
s := ‘Иван’ + ‘ Васильевич’;

в переменной s будет содержаться строка ‘Иван Васильевич’. Как, надеюсь, Вы уже поняли, операция сложения строк обозначается +. Операция сложения применима только к строкам типа string.

3. Ввод/вывод строк. Для того, чтобы ввести строку s, достаточно написать
readln(s);
А чтобы вывести:
writeln(s);

4. Сравнение строк. К строкам применимы все операции сравнения: = (на равенство), <> (на неравенство) и т.п.

С другой стороны, строка — это массив, и каждый элемент ее — символ. Строку можно обрабатывать поэлементно, иначе говоря, с ней можно обращаться как с обыкновенным символьным массивом. И выполнять любые операции, разрешенные в данном случае (см. Одномерные массивы). В частности, 5-тый символ строки s имеет имя s[5], как обычно.
Впрочем, есть одно очень важное отличие строковых переменных — это массивы переменной длины. Их длина заранее неизвестна, она зависит от того, какую строку мы присвоили строковой переменной. Длина эта хранится в 0-м элементе строковой переменной. Сами символы хранятся в элементах начиная с 1-го. Таким образом, если мы напишем
s := ‘abc’
то s[0] = 3, s[1] = ‘a’, s[2] = ‘b’, s[3] = ‘c’. Остальные элементы строки (4-ый, 5-ый и т.д.), если они есть, неопределены. Скорее всего, там хранится всякий мусор.

Однако не рекомендуется получать длину строки s как s[0]. Для этого в Паскале существует специальная функция length(s). Она возвращает длину строки, переданной ей в качестве параметра. Такой способ безопасней и надежней.
Например, так можно перебрать всю строку по символам (операция, которая часто встречается в задачах):
var s: string[50];
i: integer;
.
begin
.
readln(s);
.
for i := 1 to length(s) do
begin
<что-то сделать с символом s[i]>
end;
.
end.
Так как элемент строки имеет тип char, над ним можно производить все операции, разрешенные для этого типа данных.

Стандартные функции работы со строковыми переменными.

В Паскале есть несколько стандартных функций и процедур для работы со строковыми данными. Вот их спецификации:

1. Функция Length( <строка> ) : integer
Возвращает длину строки-параметра в символах. Например, length(‘abc’) будет равно 3-м.

2. Функция Concat( <строка> [,<строка>, <строка> . ] ) : string

Возвращает строку, являющуюся объединением (конкатенацией) всех параметров функции. Эта функция является аналогом операции сложения.
Параметров — произвольное число. Все параметры должны иметь тип
string. Например, concat(‘a’, ‘bc’, ‘!!’) будет ‘abc!!’.

3. Функция Copy( <строка>, <позиция>, <сколько> ) : string

В качестве результата возвращает подстроку <строки>, начинающуюся с символа номер <позиция> длиной <сколько> символов (как бы вырезает часть <строки>). Параметры <позиция> и <сколько> должны быть целыми выражениями. Например, результатом вызова copy(‘1234567890’,3,4) будет строка ‘3456’.

4. Функция Pos( <подстрока>, <строка> ) : byte

Определяет, содержится ли <подстрока> в <строке>. Если да, возвращает номер символа, с которого начинается <подстрока> в <строке>. Если нет, возвращает 0. Например, результатом pos(‘123’, ‘ab123cde’) будет 3, т.к. строка ‘123’ в строке ‘ab123cde’ содержится и начинается с позиции 3.

5. Процедура Delete( var <строка>, <позиция>, <сколько> )

Удаляет из <строки> <сколько> символов, начиная с символа номер <позиция>. По действию похожа на Copy, но вырезанная часть исчезает из <строки>. Параметр <строка> должен быть переменной строкового ти-
па, параметры <позиция> и <сколько> — выражениями целого типа. Например, пусть строка s = ‘123456789’. Тогда после выполнения процедуры delete(s,5,2) строка s будет равна ‘1234789’.

6. Процедура Insert( <строка>, var <строка-куда>, <позиция> )

Вставляет <строку> в <строку-куда>, начиная с символа номер <позиция>. Противоположна по действию процедуре Delete. Параметр <строка-куда> должен быть строковой переменной, параметр <позиция> —
целым выражением. Например, пусть строка s = ‘abcde’. Тогда после выполнения процедуры Insert(’12’, s,3) строка s будет равна ‘ab12cde’

7. Процедура Val( <строка>, var <ариф. перем.>, var <код ошибки> )

Преобразует <строку> в числовое значение, которое помещается в переменную <ариф. перем.>. Параметр <ариф. перем.> должен быть целой или вещественной переменной (в зависимости от того, какого типа число содержится в <строке>). Конечно же, <строка> должна содержать правильную запись числа. Если при преобразовании возникла ошибка, позиция символа, на котором ‘споткнулись’, заносится в <код ошибки>.

Если <код ошибки> равен 0, преобразование прошло успешно. Параметр <код ошибки> должен быть целой переменной. Например, пусть i и c целые переменные. Тогда после вызова Val(‘123’, i, c) переменная i = 123, а с = 0. После вызова Val(‘1a2’, i, c) значение переменной i не определено, а c = 2 (вторым символом встретилась буква).

8. Процедура Str( <ариф. выраж.>, var <строка> )

Преобразует числовое значение <ариф. выраж.> в строковое и помещает его в <строку>. Старое значение строки теряется. Параметр <строка> должен быть строковой переменной, а параметр <ариф. выраж.> — выражением целого либо вещественного типа. В <ариф. выраж.> можно задать формат преобразования (как в операторе вывода). Примеры преобразования (s — строка):
Str(4.14, s) s = ‘4.14’
i = 5 Str(i+12, s) s = ’17’
f = 3.1415926 Str(f:5:2, s) s = ‘3.14’

Таковы стандартные функции работы со строковыми переменными. Однако практически все эти действия можно произвести без применения стандартных функций и процедур.

Пример решения задачи со строками.

Разберем задачу на применение строк.
Ввести строку и заменить в ней все пробелы на троеточия.

Как выполнить замену? Надо найти пробел, вырезать его и вставить троеточие. Каждое из данных действий можно осуществить с помощью стандартных функции или процедуры, но можно и без них. Поэтому разберем два варианта решения.

Вариант A. С применением стандартных функций.

Как найти пробел? Для этого есть функция поиска подстроки pos (ничто не мешает считать пробел подстрокой, хотя и маленькой). Когда pos находит подстроку, она возвращает позицию ее начала — что нам и нужно. А если не находит — возвращает 0. Тогда мы должны закончить преобразование строки (пробелов не осталось!). Вырезать пробел можно с помощью процедуры delete, вставить — с помощью insert. Получаем следующий алгоритм:

1. Ввести строку.
2. Найти первый пробел в строке при помощи функции pos.
3. Пока результат pos не равен 0, выполнять шаги:
3.1. Удалить найденный пробел
3.2. Вставить на место пробела троеточие
3.3. Найти следующий пробел
4. Вывести получившуюся строку.

Вариант B. С использованием строки как символьного массива.

Строка — это символьный массив. Значит, найти пробелы можно просто проверяя все символы строки друг за другом. Если символ не пробел — переносим его в строку-результат. Если пробел — заносим в строку-результат троеточие, а пробел игнорируем. И так до конца исходной строки.

В отличие от первого варианта во втором потребуется две строки (дополнительная строка используется для конструирования результата). Алгоритм этого решения можно записать так:

1. Ввести исходную строку.
2. Записать в строку-результат пустую строку.
3. Для i от 1 до конца исходной строки выполнять:
если i-тый символ исходной строки — пробел то добавить к строке-результату троеточие, иначе добавить к строке-результату сам этот символ.
4. Вывести строку-результат.

Почти любая задача на строки допускает решение типа A и типа B. Вам выбирать, какое применить в Вашей программе. Программы на Паскале для этой же задачи выглядят так:

program prim1; < вариант A >
uses crt;
var s: string;
k: byte; < это номер очередного символа-пробела >
begin
clrscr;
textcolor(lightgreen);
writeln(‘Замена в строке пробелов на . ‘);
write(‘Введите строку: ‘);
readln(s);
k := pos(‘ ‘, s);
while k <> 0 do
begin
delete(s, k,1);
insert(‘. ‘, s, k);
k := pos(‘ ‘, s);
end;
writeln(‘Результат: ‘, s);
readkey;
end.
program prim_6a1b; < вариант B >
uses crt;
var s, res: string;
i: byte; < это номер очередного символа >
begin
clrscr;
textcolor(lightgreen);
writeln(‘Замена в строке пробелов на . ‘);
write(‘Введите строку: ‘);
readln(s);
res := »;
for i := 1 to length(s) do
if s[i] = ‘ ‘ then res := res + ‘. ‘
else res := res + s[i];
writeln(‘Результат: ‘, res);
readkey;
end.

Строковый тип данных в Паскале

Строки в Паскале – это данные типа string. Они используются для хранения последовательностей символов. В Паскале длина стандартной строки ограничена 255 символами. Под каждый символ отводится по одному байту, в котором хранится код символа. Кроме того, каждая строка содержит еще дополнительный байт, в котором хранится длина строки.

Если заранее известно, что длина строки будет меньше 255 символов, то программист может сам задать максимальную длину строки.

Примеры описания строк:

Длина строки хранится в первом ее байте, индекс которого равен 0.
Объявление типизированной константы для типа string осуществляется так:

Существует понятие пустой строки, то есть строки, в которой нет ни одного символа. Пустая строка обозначается двумя рядом стоящими апострофами (например, st : = » ).

Операции над строками

Строки можно присваивать друг другу. Если максимальная длина переменной слева меньше длины присваиваемой строки, то лишние символы справа отбрасываются.

Строки можно объединять с помощью операции конкатенации, которая обозначается знаком +.

Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны. В строках разной длины существующий символ всегда больше соответствующего ему отсутствующего символа. Меньшей будет та строка, у которой меньше код первого несовпадающего символа (вне зависимости от максимальных и текущих длин сравниваемых строк).

Имя строки может использоваться в процедурах ввода-вывода. При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (который вводится нажатием клавиши Enter) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.

К отдельному символу строки можно обращаться как к элементу массива символов, например s1 [ 3 ] . Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:

Можно осуществлять коррекцию любого символа строковой переменной, для чего в соответствующем операторе достаточно указать имя переменной типа string, вслед за которым в квадратных скобках задается номер ее элемента (например, str [ 3 ] : = ‘j’ ).

Элементы строки нумеруются с единицы, так как в каждой строковой переменной имеется элемент с номером 0, в котором в виде символа хранится длина текущей строки. Чтобы узнать текущую длину, достаточно применить функцию ord к нулевому элементу строки. Например:

Нулевой элемент строковой переменной можно корректировать. При этом будет изменяться текущая длина строки. Например, выражение str [ 0 ] : = #50 устанавливает текущую длину равной 50.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *