Строковый тип данных (STRING) в паскаль служит для проведения операций с текстом, состоящим из различных символов. В одну переменную типа String можно записать до 255 символов. По сути это массив, содержащий в себе элементы типа char (символьный тип данных). Переменная string описывается так же, как и переменные типа real или integer.
var s:string; // s – любая переменная, не описанная ранее
Если вы хотите указать максимальное количество символов, которое может содержать в себе строка, то это делается в квадратных скобках:
var s:string[8]; // 8 – максимальное кол-во символов в строке
Для строки применимы процедуры read (readln) и write (writeln), строку можно как считать, так и вывести целиком:
readln (s);
write (s);
Если при считывании строки вводимое слово длиннее, чем длина строки, то запишется только то количество символов, которое указано в квадратных скобках.
К отдельным элементам строки обращаются так же, как и к элементам массива, указывая в квадратных скобках номер символа.
Программирование на языке Pascal. Урок 9. Строки.
write (s[5]); // Вывод 5-го символа
При присваивании строке или символу какого-либо значения оно указывается в одинарных кавычках (‘).
Пример программы на паскаль с использованием типа string:
var s:string[6];
begin
s:=’Пример’;
writeln(s);
end.
Данная программа выводит слово «Пример».
Строки можно складывать, копировать и так далее, но об этом в одном из следующих уроков. В паскаль работа со строками будет рассматриваться позже.
Недавно писал программу, которая высчитывала по какому маршруту отправляли Кондиционеры в Симферополь, вот там без строк никак не обойтись.
Источник: zedpost.ru
Работа со строками в Pascal
По своей сути строки в паскале представляют собой одномерные массивы символов.
Для объявления переменной вида «строка» используется тип string , для символов – char .
Максимальная длина строки составляет 255 символов. Если вам необходимы для работы более короткие строки, то их длину в квадратных скобках указывают при описании переменной типа string . Если длина не указана, то по умолчанию ее длина будет максимально возможной, т.е. 255 символов.
Var s : string; s1 : string [10]; c : char;
Объявлены переменные типа «строка»: s – длиной 255 символов и s1 длиной 10 символов.
Переменная c – типа «символ».
Для присвоения значения типа строка переменной используются апострофы.
S :=’Привет, мир!’;
Для присвоения «нулевого» значения переменной типа «строка» используются два апострофа подряд, что означает, что в строке нет символов.
У каждого символа в строке, как у элемента одномерного массива, есть индекс. Со строкой и ее символами можно работать, как с одномерным массивом.
Write ( s );
Выведет на экран : Привет, мэр!
Для соединения нескольких строк в одну используется “ + ” либо Concat (s1, s2. sn)
Pascal | Задачи со строками #1
Например, последовательность команд
s3:=’ мир ! ‘;
write (s1+s2+s3);
write (concat(s1,s2,s3));
Выведет на экран: Привет, мир ! Привет, мир !
Чтобы выделить подстроку из строки используется функция Copy (S, poz, n) , где S – строка, из которой, начиная с позиции poz , копируем подстроку, состоящую из n символов.
s1:=’Привет, мир!’;
write (copy(s1,9,3)); // выделить подстроку, начиная с 9 позиции, длиной 3 символа
Выведет на экран: мир
Для поиска в строке подстроки используется функция Pos (subS, S) , которая определяет с какой позиции подстрока subS входит в строку S (возвращает целое число, равное индексу в строке первого символа искомой подстроки). Если искомой подстроки не обнаружено, то функция вернет 0.
s :=’Привет, мир!’;
write ( pos (‘мир’,s )); // найти с какой позиции в строке находятся символы ‘мир’
Выведет на экран: 9
write (pos(‘ мэр’,s));
Выведет на экран: 0
Для определения длины строки (количества символов в строке) используется функция Length(s).
write (Length(s));
Выведет на экран: 12
write (Length(s));
Выведет на экран: 0
Для удаления из строки символов используется процедура Delete (s ,poz ,n ) , которая из строки s , начиная с позиции poz , удаляет n символов. При этом длина строки уменьшается на n .
s:=’ Привет, мир !’;
writeln (length(s));
Delete (s,5,2); // удалить из строки 2 символа, начиная с 5
writeln (s,’ ‘,length(s));
Выведет на экран:
Для добавления в строку символов/подстроки используется процедура Insert (s ubs ,s ,poz ).
Подстроку subs вставить в строку s с позиции poz . Соответственно длина строки увеличивается на n.
s:=’ Привет, мир !’;
writeln (length(s));
Insert (‘мой ‘,s,9);
writeln (s,’ ‘,length(s));
Выведет на экран:
Привет, мой мир! 16
Строки можно сравнивать между собой, используя математические символы: =,<>,>,=. Сравнение строк производится слева направо посимвольно до первого несовпадающего символа, большей считается та строка, в которой первый несовпадающий символ имеет больший код в таблице кодировки ASCII. Если строки имеют различную длину, но в общей части символы совпадают, считается, что короткая строка меньше. Строки равны, если они имеют равную длину и соответствующие символы совпадают.
В результате сравнений получаем логическое значение false или true.
Например, возьмем две строки одинаковой длины, но разного содержания и их сравним:
writeln (s=s1);
False // не совпадает последняя буква
False // буква «р» имеет числовое значение кода большее, чем буква «в»
Теперь возьмем строки разной длины:
writeln (s=s1);
writeln (s>s1);
False // несмотря на совпадение первых 4 букв, длина строки больше
Для образца посмотрите небольшую программу, по обработке строки разными способами:
Источник: dzen.ru
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
pascalabcnet.github.io / pages / mydoc / school_strings.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cannot retrieve contributors at this time
183 lines (136 sloc) 6.83 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
Символы и строки в PascalABC.NET
strings, PascalABC.NET, Pascal, Паскаль
mydoc_sidebar
school_strings.html
Символы и основные операции над ними
Символы имеют тип char, занимают 2 байта и хранятся в кодировке Unicode (UTF-16).
var c1: char; var c2 := ‘z’;
Для преобразования символа c в код используется функция Ord(c) , для обратного преобразования кода i в символ используется функция Chr(i) .
begin var c := ‘ю’; Print(Ord(c)); // 1102 Print(Chr(1102)); // ю end.
Классический способ определить символ, следующий за данным в кодовой таблице, — это преобразовать символ в код, прибавить к коду число и потом преобразовать полученный код снова в символ:
Chr(Ord(c)+1)
Аналогично определяется предыдущий символ
Методы типа char
Методы, встроенные в тип char, делятся на две категории:
- проверяющие, принадлежит ли символ указанной категории: c.IsDigit , c.IsLetter , c.IsLower , c.IsUpper
- преобразующие символ: c.ToUpper , c.ToLower , c.ToDigit .
Отметим также, что c.IsLower возвращает True только если это буква в нижнем регистре — для не букв возвращается False .
Отметим, что для строк имеется много операций и методов, не все из которых мы рекомендуем для школьников.
Основная причина — многие методы строк в .NET считают, что строки индексируются с нуля, а в Паскале строки индексируются с 1.
Для устранения этой дилеммы при работе со школьниками мы не используем методы строк, которые работают с индексами, индексируемыми с нуля. Для них существуют эквивалентные замены внешними функциями, которые предполагают, что строки индексируются с 1.
Строки в Паскале индексируются с 1. К символам строк можно обращаться по индексам — s[i] .
begin var s: string; s := ‘тор’; Print(s[1],s[2],s[3]); end.
Символы строк можно менять:
begin var s := ‘пир’; s[1] := ‘м’; Print(s); // мир end.
Можно использовать индексацию с конца: s[^i] обозначает i-тый символ с конца
begin var s := ‘мир’; s[^1] := ‘г’; Print(s); // миг end.
Циклы по строкам
begin var s := ‘привет’; for var i:=1 to s.Length do s[i] := Chr(Ord(s[i])+1); Print(s); end.
foreach var c in s do Print(c);
Операции +, *n и in
Строки можно складывать и умножать на целое положительное число
Пример. Генерация строки ‘abcdefghijklmnopqrstuvwxyz’
Идея. Начать с пустой строки. Всякий раз в цикле добавлять к строке символы от ‘a’ до ‘z’
begin var s := »; for var c := ‘a’ to ‘z’ do s += c; end.
Методы Count, CountOf, Where
Чтобы посчитать количество символов в строке, удовлетворяющих определённому условию, используется метод Count. Если нужно посчитать, сколько раз встречается определенный символ, используется более простой метод CountOf
begin var s := ‘абракадабра’; s.CountOf(‘а’).Print; s := ‘а123бр45а67к89адабра’; s.Count(c -> c.IsDigit).Print; end.
Если в строке надо отфильтровать только определенные символы, используется метод Where. Он возвращает последовательность символов, которую можно назад преобразовать к строке, используя метод JoinToString:
begin var s := ‘а123бр45а67к89адабра’; s := s.Where(c -> c.IsLetter).JoinToString; end.
s.ToWords и разбиение строки на слова
Метод s.ToWords разбивает строку на массив слов, используя пробел в качестве разделителя. Полученный массив можно преобразовать и слить в строку, используя метод JoinToString:
begin var s := ‘как однажды жак звонарь головой сломал фонарь’; var a := s.ToWords; Sort(a); s := a.JoinToString end.
По умолчанию JoinToString разделяет слова пробелами
Функция Pos и процедуры Delete, Insert
Pos(subs,s) возвращает позицию первого вхождения подстроки subs в сторке s или 0 если подстрока не найдена
Pos(subs,s,from) начинает искать подстроку в строке с позиции from .
Следующий код выводит позиции всех вхождений s1 в s:
begin var s := ‘абракадабра’; var s1 := ‘бра’; var p := Pos(s1,s); while p>0 do begin Print(p); p := Pos(s1,s,p+s1.Length); end; end.
Источник: github.com