comp-science.narod.ru ==> Дидактические материалы по информатике ==> Строки
Познакомимся с типом данных, который относится к числу структурированных. Это строковый тип данных (строка). Строка это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной. Длина строки может находиться в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными. Особенностью строки в Turbo Pascal является то, что с ней можно работать как с массивом символов, с одной стороны, и как с единым объектом, с другой. За счет этого обработка строк достаточно гибка и удобна. Строковая константа есть последовательность символов, заключенная в апострофы. Например: 'это строковая константа', ‘272’. Строковая переменная описывается в разделе описания переменных следующим образом:
Например:
Var Name : string[20];
Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине 255. Например: Var slovo : string.
Строковая переменная занимает в памяти на 1 байт больше, чем указанная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не присвоено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.
Символы внутри строки индексируются (нумеруются) от единицы. Каждый отдельный символ идентифицируется именем строки с индексом, заключенным в квадратные скобки. Например: N[5], S[i], slovo[k+l]. Индекс может быть положительной константой, переменной, выражением целого типа. Значение индекса не должно выходить за границы описания.
Тип string и стандартный тип char совместимы. Строки и символы могут употребляться в одних и тех же выражениях.
Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операции сцепления и операции отношения.
Операция сцепления (конкатенации) (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.
Пример: 'Мама ' + 'мыла ' + 'раму'. В результате получится строка: 'Мама мыла раму'. Длина результирующей строки не должна превышать 255.
Операции отношения: =, <, >, <=, >=, <>. Позволяют произвести сравнение двух строк, в результате чего получается логическое значение (true или false). Операция отношения имеет приоритет более низкий, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.
Пример:
Выражение | Результат |
‘True1’<’True2’ | True |
‘Mother’>’MOTHER’ | True |
‘Мама ‘ <> ‘Мама’ | True |
‘Cat’=’Cat’ | True |
Функция Copy(S, Pozition, N) выделяет из строки S подстроку длиной N символов, начиная с позиции Pozition. Здесь N и Pozition целочисленные выражения.
Пример:
Значение S | Выражение | Результат |
‘Мама мыла раму’ | Copy(S, 6, 4) | ‘мыла’ |
‘Маша ела кашу’ | Copy(S, 1, 8) | ‘Маша ела’ |
Функция Concat(S1, S2, …, SN) выполняет сцепление (конкатенацию) строк S1, S2, …, SN в одну строку.
Пример:
Выражение | Результат |
Concat('Маша ', 'ела ', 'кашу') | 'Маша ела кашу' |
Функция Length(S) определяет текущую длину строки S. Результат значение целого типа.
Пример:
Значение S | Выражение | Результат |
'test-5' | Length(S) | 6 |
'(A+B)*C' | Length(S) | 7 |
Функция Pos(S1, S2) обнаруживает первое появление в строке S2 подстроки S1. Результат целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 подстроки S1 не обнаружено, то результат равен 0.
Пример:
Значение S2 | Выражение | Результат |
'abcdef' | Pos('cd', S2) | 3 |
'abcdcdef' | Pos('cd', S2) | 3 |
'abcdef' | Pos('k', S2) | 0 |
Процедура Delete(S, Poz, N) удаление N символов из строки S, начиная с позиции Poz.
Пример:
Исходное значение S | Оператор | Конечное значение S |
'abcdefg' | Delete(S, 3, 2) | 'abefg' |
'abcdefg' | Delete(S, 2, 6) | 'a' |
В результате выполнения процедуры уменьшается текущая длина строки в переменной S.
Процедура Insert(S1, S2, Poz) вставка строки S1 в строку S2, начиная с позиции Poz.
Пример:
Исходное значение S2 | Оператор | Конечное значение S2 |
'ЭВМ РС' | Insert('IBM-', S2, 5) | 'ЭВМ IBM-PC' |
'Рис. 2' | Insert('N', S2, 6) | 'Рис. N 2' |
S:= ''; For I:= '0' to '9' do S:=S+I;Какое значение получит переменная S после его исполнения?
Type String40 = String[40]; M = Array[1..100] Of String40; Var A : M; I, J, Min, N : Byte; Vsp : String40; Begin Write('N? '); ReadLn(N); For I := 1 To N Do ReadLn(A[I]); For I := 1 To N-1 Do Begin Min := I; For J := I + 1 To N Do If A[J] < A[Min] Then Min := J; Vsp := A[I]; A[I] := A[Min]; A[Min] := Vsp; End; WriteLn('Ответ: '); For I := 1 To N Do WriteLn(A[I]) End.Точно и однозначно сформулировать условие задачи, решение которой приведено в данном фрагменте.
Var S : Array[1..100] Of String;Какое из обращений к J-му символу I-той строки (I-го элемента массива S) будет правильным?
© Шестаков А.П., 2001