Строки в паскале . Тип 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ледует запомнить,что сравнение строки производится слева направо и обязательно посимвольно!!! Это значит ,что в первую очередь надо сравнить первые элементы ,затем вторые ,третьи и т.д. Если при посимвольном сравнении сравнивается пустой символ и любой другой символ ,то пустой символ всегда будет меньше . Теперь самое главное . Сравнивают не сами символы а коды этих символов : чей код больше ,тот символ и будет "больше" . Таблица символов представлена ниже.

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



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

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 нельзя!
Понравилась новость? Добавь в закладки!
Хочешь получать свежие новости? Подпишись на обновления с сайта!
Рекомендуем посмотреть:
#1 | написал: секрет | 28 января 2012 22:27 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0

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


#2 | написал: вопрос | 23 марта 2012 20:28 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0

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


#3 | написал: Mr.Cheater | 23 марта 2012 22:03 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68

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


#4 | написал: Anonymous | 26 октября 2015 15:23 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
{получаем ,что w:=' вася хорошо учиться' }

Правописание "тся","ться" в школе, наверно, не проходили...

#5 | написал: Mr.Cheater | 13 ноября 2015 23:15 | ICQ: 360239964 | Пользователь offline

Группа: Администраторы
Публикаций: 33
Комментариев: 68
Цитата: Anonymous
{получаем ,что w:=' вася хорошо учиться' }

Правописание "тся","ться" в школе, наверно, не проходили...

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

Добавление комментария

Ваше Имя:
Ваш E-Mail:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Вставка исходного кода Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера

Введите два слова, показанных на изображении: