Строки в паскале . Тип String

Строки в паскале . Тип String

Итак, что такое строка? Фактически строка — это массив, состоящий из символов. В строку могут входить все ASCII-символы (эти символы показаны в конце статьи). То есть машина, улица-сезам, три головы,13 стульев, 12ррр443р43г?:?**:па,542″№;%:? а а 69866 — все это строки. Строки объявляются так

var s:string;
green:string[15];
f,grey:string;

Как вы видите, длину строки можно как указать, так и оставить неуказанной. Однако тут следует запомнить,что максимальная длина строки — 255 символов и больше вы в одну строку ну никак не запихнете. То есть, когда вы не указываете размер строки — она принимает максимальный размер в 255 символов. Обратиться к символу в строке просто — необходимо только знать его порядковый номер. Порядковый номер начинается с 1 и заканчивается соответственно 255 (помним, что строка не может быть длиннее 255 символов). Например имеем строки

s:=’abcde’;
x:=’abcdeg’;
f:=’123′
g:=’ ‘;
d:=»;
h:=’rgrrg12 yt yyt’;

Этот пример показывает, что строка может состоять из любых символов кодировки ASCII. Обратите внимание! Пробел также считается символом.Например строка g состоит из одного символа — пробела. Также существует ситуация, когда в строке совсем нет символов. Тогда говорят,что строка содержит пустой символ. В нашем примере это строка d. Следует также добавить, что стандартный Turbo Pascal не поддерживает кириллицу (русские буквы) в отличие от PascalABC и Free Pascal, которые без проблем работают с ними.

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

s:=’вася ‘; {обратите внимание ,что эта строка состоит из слова «вася» и следующего за ним символа пробела}
z:=’хорошо учиться’;
x:=’плохо учиться’;
w:=»;

w:=s+z; {получаем ,что w:=’ вася хорошо учится’ }
w:=»; {«обнуляем» переменную w . теперь она пустая}
w:=x+’ ‘+s; {получаем  w:=’плохо учится вася ‘ . перед словом «вася» стоит символ пробела только потому ,что мы его добавили при слиянии}

Теперь о сравнении строк. Тут дело обстоит немного сложнее. Cледует запомнить, что сравнение строки производится слева направо и обязательно посимвольно!!! Это значит, что в первую очередь надо сравнить первые элементы, затем вторые, третьи и т.д. Если при посимвольном сравнении сравнивается пустой символ и любой другой символ, то пустой символ всегда будет меньше. Теперь самое главное. Сравнивают не сами символы а коды этих символов: чей код больше, тот символ и будет «больше». Таблица символов представлена ниже.

Для наглядности сравним несколько строк. Имеем

s:=’abcde’;
x:=’abcdeg’;
f:=’123′
g:=’ ‘;
d:=»;
h:=’7’;

Тогда при сравнении

x>s {верно}
f>x; {неверно}
s+h<x; {верно}
d<g; {верно}
h<d; {неверно}

В паскале также есть необходимые функции и процедуры для работы с типом string. Перед тем как мы к ним перейдем запомните, что переменные m,n принимают только целочисленные значения,а Str и podStr являются строковыми переменными. Начнем с функций:

Copy (Str, m, p) находит в строке Str подстроку ,начинающуюся с символа на месте m и, начиная от него, копирует p символов вправо.

Concat (str1, str2,…,strn) соединяет (выполняет слияние) строк str1, str2,…,strn в одну строку.

Length (Str) определяет длину строки Str. В качестве результате выводиться целое число.

Pos (podStr, Str)

определяет есть ли в строке Str подстрока podStr. Если есть — то в результат будет записано целое число, которое указывает на номер символа в строке Str, с которого начинается подстрока podStr. Если же подстрока не входит в строку, то в результате будет выведено число 0.

Переходим к процедурам:

Delete (Str,m,p)

— процедура удаления подстроки из строки (подстрокой может быть и один символ). Опишем процесс удаления: в начале в строке Str находится символ с индексом m (стоящий на m месте), затем от этого символа отсчитываются p символов вправо и конце концов удаляется получившаяся подстрока.

Insert (podStr, Str, m) — процедура необходима для вставки подстроки podStr в строку Str. Подстрока вставляется в строку с позиции m.

Итак у нас остались две последние процедуры, с помощью которых можно преобразовывать типы в паскале. Наверное, некоторым не понятно зачем вообще преобразовывать типы? Приведу наглядный пример: допустим мы вводим строку d=’75409привет’ и нам необходимо сложить все числа в этой строке и для сложения использовать переменную sum. Теперь встает проблема. Мы не может суммировать числовые переменные, записанные в строку, потому что компилятор воспринимает их не как числа, а как символы. Для подсчета суммы переменная sum должна быть числовой, например иметь тип integer. Однако запись вида

sum:=d[1]+d[2]+d[3]+d[4]+d[5]

у вас работать не будет потому, что переменные d[1],d[2],d[3],d[4],d[5] должны быть тоже числового типа (integer,real,byte). Вообще запомните,что лучше всего, когда переменные sum,d[1],d[2],d[3],d[4],d[5] одного типа. Делаем вывод: если мы работаем со строковой переменной, содержащей числа и нам необходимо произвести с этими числами какие-либо действия (сложение, вычитание, умножение, деления, нахождение среднего и т.д.), то нам сначала необходимо преобразовать тип этих чисел из строкового в числовой. Ну, а если кратко то string в, например, integer.

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

А теперь перейдем собственно к процедурам преобразования типов.

Val (Str, k, pr)

— используя эту процедуру можно преобразовать строковую переменную в числовую. Преобразуется строка Str и результат записывается в переменную k. А переменная pr необходима для проверки преобразования на ошибки. Если во время преобразования произошла ошибка, то в переменную pr записывается целое число, которая указывает на номер символа в строке Str, с которого началась ошибка в преобразовании. Если ошибок нет, то pr = 0.

Str (k, Str)

— процедура обратная процедуре Val. То есть с ее помощью числовая переменная преобразуется в строковую. В данном случае числовая переменная k преобразуется в строку Str.

И напоследок я хотел бы обратить ваше внимание на интересную особенность. В начале статьи я сказал, что длина строки может быть в диапазоне от 1 и до 255 символов. На самом деле размерность строки 0.255, однако элемент stroka[0] не предназначен для записи символов. В него записывается длина строки причем записывается она в виде знака ‘#’ (решетка) и цифр. Для того ,чтобы узнать длину строки достаточно использовать команду

writeln(ord(stroka[0]))

А чтобы изменить длину строки нужно использовать присвоение. Изменим длину строки stroka

stroka[0] := #10;

В этом примере мы изменили длину строки и теперь она равна 10. Внимание работа с нулевым элементом (stroka[0]) возможна не в каждом компиляторе. В Turbo Pascal это сделать можно, а вот в PascalABC нельзя!

5 комментариев

  • Секрет

    Ответить 28.01.2012 17:59

    А можно статью про то, как написать функцию замены строки (каждого вхождения)? И как наиболее эффективно это можно сделать?

  • вопрос

    Ответить 23.03.2012 18:00

    Как же на паскале программируют с длиной строки в 255 символо???

  • Mr.Cheater

    Ответить 23.03.2012 18:00

    вопрос,
    Ну а что здесь такого? строка имеет ограничение в 225 символов ,но ведь можно использовать массив строк
    да и не забывайте,что речь идет о turbo pascal, в pascalABC ,например, ограничение на длину строк нет

  • Anonymous

    Ответить 26.10.2015 18:00

    {получаем ,что w:=’ вася хорошо учиться’ }

    Правописание «тся»,»ться» в школе, наверно, не проходили…

  • Mr.Cheater

    Ответить 13.11.2015 18:01

    Цитата: Anonymous:
    «{получаем ,что w:=’ вася хорошо учиться’ }
    Правописание «тся»,»ться» в школе, наверно, не проходили…»

    Мелкие орфографические ошибки совсем не мешают тем, кто пришел сюда действительно узнать что-то новое, а не ерундой помаяться.

Оставить комментарий