Раздел: Стандартные функции Паскаля
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Функция Length в Паскале определяет длину строки. Синтаксис:
function Length(S : AStringType) : Integer;
Второй вариант для динамических массивов:
function Length(A : DynArrayType): Integer;
Функция возвращает длину
строки S, которая ограничена значением 255 для коротких строк (в классическом Паскале — это максимальная длина строки). Если S — это пустая строка, то функция возвращает 0.
Функция Length может вычислять длину строки для типов AnsiString и WideString.
Для динамических массивов функция возвращает количество элементов в массиве.
Функция определения длины строки Length также поддерживает параметры типа PChar
и PWideChar. В этом случае она работает также, как функции StrLen и WStrLen
соответственно. В этом случае функция вычисляет длину строки с нулевым
окончанием (с завершающим нулём), а время её выполнения пропорционально длине
строки, потому что завершающий нулевой символ ищется путём последовательного
перебора всех символов строки.
Как определить длину строки в Паскале
Думаю, уже понятно, что сделать это можно с помощью функции Length. Например, так:
str := '0123456789'; n := Length(str);
Однако есть и другой способ, о котором мало кто знает. Правда, этот способ можно использовать только с типом ShortString. Но в большинстве случаев этого строкового типа вполне достаточно.
Этот способ позволяет немного сэкономить процессорное время, так как для его использования не требуется тратить это время на вызов функции.
А суть его проста. Дело в том, что в типе ShortString длина строки хранится в нулевом элементе строки. Как известно, в Паскале отсчёт символов в строке начинается с единицы. Однако в типе ShortString есть и нулевой элемент, в котором и хранится длина строки:
ch := str[0]; //Здесь хранится длина строки типа ShortString WriteLn(Ord(ch), ' (', ch, ')');
Проблема только в том, что эта длина строки хранится как ASCII-код символа, и
получить этот элемент можно только как символ. Но это не беда, потому что мы уже
умеет преобразовывать символ в его код с помощью функции Ord.
Пример программы см. в конце статьи.
Как задать длину строки в Паскале
В некоторых случаях для экономии памяти можно задать фиксированную длину строки.
Делать это можно, когда вы точно уверены, что для ваших нужд в вашей программе потребуется, например, строка, в которой будет не более какого-то определенного количества символов.
Задать длину строки в Паскале можно так:
s04 : string[4]; //Строка из 4-х символов s20 : string[20]; //Строка из 20-ти символов
Затем с этими переменными можно работать как с обычными строками. Только следует помнить, что при попытке поместить, например, в s04 строку длиной более 4 символов, в эту строку будут помещены только первые четыре символа, а остальные будут отброшены.
Ниже приведён пример программы, где рассмотрены все вышеописанные случаи:
program lengthfunc; var i, n, x : integer; ch : Char; str : ShortString; s04 : string[4]; //Строка из 4-х символов s20 : string[20]; //Строка из 20-ти символов begin Randomize; str := ''; n := Length(str); //n = 0 WriteLn(n); str := '0123456789'; n := Length(str); //n = 10 WriteLn(n); for i := 1 to n do if i = n then Write(str[i]) else Write(str[i] + '-'); WriteLn; x := Random(26) + 1; str := ''; for i := 1 to x do str := str + Chr(i+64); WriteLn(str); ch := str[0]; //Здесь хранится длина строки типа ShortString WriteLn(Ord(ch), ' (', ch, ')'); str := '0123456789'; s04 := str; s20 := str; WriteLn('str = ', str, //Выведет 0123456789 ', s04 = ', s04, //Выведет 0123 ', s20 = ', s20); //Выведет 0123456789 ReadLn; end.
|
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение — ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |
to continue to Google Sites
Not your computer? Use Guest mode to sign in privately. Learn more
На занятии будет рассмотрен Строковый тип данных в Паскаль и примеры работы с ним
Содержание:
- Символьный тип char в Паскале
- Основные функции для работы с символами
- Строковые переменные в Паскаль
- Функции работы со строками в Pascal
- Стандартные методы и запросы (pascalAbc.net)
- Посимвольный ввод до пробела
Символьный тип char в Паскале
Символьной переменной соответствует тип char:
Инициализация символьной переменной:
Основные функции для работы с символами
Функция преобразует целое число, имеющее тип BYTE, в один символ ASCII-кода:
Пример: распечатать двойную кавычку по ее коду в ASCII-таблице
1 2 3 4 5 6 7 |
var a:char; i:byte; begin i:=34; {код, соответствующей символу " в ASCII-таблице} a:=chr(i); writeln(a) end. |
Функция возвращает порядковый номер символа параметра в таблице ASCII:
Пример: Распечатайте часть таблицы ASCII, конкретнее — символы, соответствующие кодам 32-255
1 2 3 4 5 |
var i: integer; begin for i:=32 to 255 do write(chr(i):3); end. |
Примеры:
var c := 'Ю'; var n := Ord(c); // n := c.Code Print(n); // 1070 c := Chr(n); print(c); // Ю
Символьные константы: #код
– символ с определенным кодом:
#10 – новая строка (Linux) #13#10 – новая строка (Windows) #9 – tab Print('a'#10'b');
Методы класса типа char
char.IsLetter(с); // буква ли, boolean char.IsDigit(с); // десятичное ли число, boolean char.IsLower(с); // буква нижнего регистра, boolean char.IsUpper(с); // буква верхнего регистра, boolean char.IsPunctuation(с); // знак препинания, boolean с := char.ToLower(с) ; с := char.ToUpper(с);
Операции для типа char
c1 < c2;// сравнение по коду c1 > c2; с in ['a','e','i','o','u',’y’]; // c принадлежит гласным с in ['a'..'z','A'..'Z’]; // c принадлежит английским буквам
Задание:
Запросите ввести два символа. Определите, принадлежат ли символы английским буквам, и если да, то гласные ли это буквы. Преобразуйте в верхний регистр ту букву, код которой меньше.
Пример вывода:
Введите два символа: u z u - английская буква, гласная z - английская буква, не гласная Буква u в верхнем регистре U
Некоторые выражения:
//c принадлежит диапазону: c.InRange('a'..'z'); //Трансформация символа в цифру: var n := Ord(c) – Ord('0'); // Увеличение кода символа на n: c := Chr(Ord(c) + n); // или Inc(c,2);
Строковые переменные в Паскаль
Строковые переменные в Паскале имеют тип String
Объявление и инициализация строковой переменной:
1 2 3 4 5 var a:string; begin a:='Привет всем!'; writeln(a); end.Ввод значения строковой переменной с клавиатуры:
1 2 3 4 5 6 var a:string; begin writeln('Введите слово'); readln(a); writeln('Вы ввели слово ',a); end.Строка «рассматривается» компилятором, как массив букв:
для компилятора:
s[1]='Б' s[2]='а' s[3]='н' s[4]='к' s[5]='а'
Важно: Значения строковых переменных всегда заключаются в одинарные кавычки
Функции работы со строками в Pascal
Исходные данные | Операция | Результат |
---|---|---|
s1:='Мото'; s2:='роллер' |
s3:=s1+s2; |
s3=’Мотороллер’ |
s5:='Мотороллер'; |
k:=Pos('рол',s5); |
k=5 |
s3:='Мотороллер'; |
l:=Length(s3); |
l=10 |
s3:='астроном'; |
s4:=Copy(s3,3,4); |
s4= ‘трон’ |
s5:='Коробочка'; |
Delete(s5,4,2); |
s5=’Корочка’ |
s6:='Рука'; s7:='баш'; |
Insert(s7,s6,3); |
s6=’Рубашка’ |
x:=2.73284; |
Str(x:4:2,s8); |
s8=’2.73′ |
s8='2.73'; |
Val(s8,x,Osh); |
x=2.73 |
Пример: Подсчитать кол-во букв «f» в тексте.
Показать решение:
Паскаль | PascalAbc.NET | ||||
---|---|---|---|---|---|
|
|
Операции со строками:
s1 + s2 // конкатенация s1 и s2 s1 += s2 s1 < s2 // лексикографическое сравнение 'abcd' < 'aad' s * n // конкатенация n копий строки s s[a:b] // срез (индексация с 1) s[a:b:step] // срез с шагом s?[3:5] ; // безопасный срез (не вызывает ошибок) s?[a:b:step] // безопасный срез с шагом s1 in s
String 1. Дан текст. Удалить в нём все слова кот. Выполнить задание двумя способами: используя стандартные функции работы со строками, и, работая со строкой как с массивом символов.
Пример выполнения:
введите строку мой кот - хороший кот Результат: мой - хороший
* Задание повышенной сложности: запросить у пользователя ввести подстроку, которую требуется удалить из исходной строки.
String 2. Составить программу проверки, есть ли в тексте буква s. Выдавать true (если найдено) или false (если не найдено).
Примеры использования логического типа (true и false) смотрите здесь.
Пример выполнения:
Введите строку: Hello world Результат: false
Введите строку: Hello students Результат: true
String 3. Имеется строка текста. Требуется написать программу, которая зашифровывала бы ее в другую строку — заменяя каждый символ текста символом, следующим по порядку в таблице ASCII. Тогда слово КОТ превратится в слово ЛПУ. Требуется составить и программу дешифровки.
Использовать функции для работы с символами: chr и ord pascal.
String 4. Дано предложение, определить количество слов в нём.
Подсказка: считать количество слов по количеству пробелов в строке.
* усложненный вариант: предусмотреть, что в начале или в конце введенной строки введен пробел
Пример: Найти количество цифр в строке.
Показать решение:
Паскаль | PascalAbc.NET | ||||
---|---|---|---|---|---|
|
|
Пример: Определить является ли данное слово перевертышем (палиндромом).
Показать решение:
Паскаль | PascalAbc.NET | ||||
---|---|---|---|---|---|
|
|
String 5. Составить программу подсчета количества встречаемых в тексте сочетаний букв «ма».
String 6. Определить, встречается ли в тексте сочетание букв «ку».
Пример выполнения:
Введите строку: Кума Результат: да
Введите строку: Дед Результат: нет
String 7. Заменить данную букву в слове другой буквой (буквы вводит пользователь).
Пример выполнения:
Введите строку: Барабулька Введите букву, которую заменить: а Введите букву, на которую заменить: у Результат: Бурубульку
String 8. Дано предложение, определить количество слов, начинающихся с буквы «к».
String 9. Дано предложение, состоящее из букв и цифр. Определить слово с наибольшим количеством букв (не цифр). В качестве подсказки можете использовать предложенный ниже алгоритм:
Пример выполнения:
Введите строку: 1234567891011слово следующееСлово иСледСлово Слово с максимальным количеством букв: следующееСлово
Алгоритм:
for
.const letters=['a'..'z'];
), то этот символ прибавляется к первому элементу массива слов строки (... array [1..100] of string
).String 10. Дано предложение. Расположить слова в нем в порядке возрастания числа букв в словах. В качестве подсказки можете использовать предложенный ниже алгоритм:
Алгоритм:
arrayS: array[1..100] of string;
строковый массив — будущий массив из слов предложения). Добавляя каждую букву к элементу arrayS[k].String 11. Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы».
Пример: Введите имя, фамилию и отчество: Иван Алибабаевич Попов Результат: Попов И.А.
Примечание:
Использовать функции: Pos, Copy, Delete
String 12. Программа должна позволять ввести текст, и потом удалять в нем все восклицательные знаки, расположенные непосредственно перед запятой, и выводить измененный текст на экран.
Пример:
Входной текст: Алгоритм — это правила выполнения определенных действий!, предписание исполнителю! совершить последовательность действий!, набор команд для компьютера! Выходной текст: Алгоритм — это правила выполнения определенных действий, предписание исполнителю! совершить последовательность действий, набор команд для компьютера!
Трудность низкая:
Программа должна формировать в памяти вторую строковую переменную с измененным текстом, а потом выводить ее на экран.
Трудность высокая:
Программа должна преобразовывать исходную строку без использования дополнительных переменных, и затем выводить ее на экран.
А теперь рассмотрим олимпиадное задание по Паскалю:
Задача Цезарь: Шифр Цезаря заключается в том, что каждая буква исходной строки заменяется третьей после нее буквой в алфавите, который считается написанным по кругу (все символы текста латинские и прописные).
* Решить ту же задачу, в которой сдвиг будет не на 3 позиции, а на k
, причем отрицательное значение является признаком сдвига влево, положительное — вправо.
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
var a:char; i,n:byte; s,s1:string; begin s1:=''; readln(s); for i:=1 to length(s) do begin n:=ord(...); n:=n+3; if n=123 then n:=97; {в ASCII 120 - x, 97 - a} if ...; {в ASCII 121 - y, 98 - b} if ...; {в ASCII 122 - z, 99 - c} a:=chr(...); s1:=...; end; writeln(s1) end. |
Стандартные методы и запросы (pascalAbc.net)
CountOf
— количество вхождений'мама мыла раму'.CountOf('м').Print; // 4
Contains
— содержит ли (логическая)'мама мыла раму'.Contains('б').Print; // False
IndexOf
— индекс искомого вхождения'hello world'.IndexOf('w').Print; // 6
Remove
— удаление вхождения'hello world'.Remove(' ').Print; // helloworld
Replace
— замена вхождений символа на другой символ'hello world'.Replace('l','L').Print; // heLLo worLd
и другие…
Запросы LINQ со строками
* LINQ (Language Integrated Query) — язык интегрированных запросов
Where
— Фильтрация массива (последовательности) с условиемvar sArr:=Arr('aab','bcd','efg'); sArr.Where(w->w.Contains('b')).Print; // aab bcd sArr.Where(w->w.CountOf('a')=2).Print; // aab
Задания: Предыдущие задания выполнить с использованием стандартных методов и запросов фильтрации.
Посимвольный ввод до пробела
Посимвольный ввод удобен для «мгновенной» обработки символов в строке.
Пример: посимвольно считывать фамилию
Решение:
var name: array[1..n] of string; c:char; ...
Для организации массива символьных строк:
Пример: посимвольно считывать фамилии и заносить их в массив фамилий
Решение:
String 13. Программа должна позволять ввести предложение до точки (.
). Необходимо в введенном тексте вместо всех букв «ё» ставить буквы «е». Выполнить, работая со строкой посимвольно: программа должна формировать в памяти вторую строковую переменную с измененным предложением, а потом выводить ее на экран.
Пример:
Входной текст: Алгоритм — это правила выполнения определённых действий. Выходной текст: Алгоритм — это правила выполнения определенных действий.
String 14. с клавиатуры вводится число N, обозначающее количество студентов в группе, а затем – N строк, в каждой из которых – информация о студенте в формате:
<Фамилия> <год рождения> <оценка>
- Все данные разделяются одним пробелом. Нужно подсчитать, сколько студентов получили отметку 5.
- Вывести фамилии студентов, у которых оценка 2.
- Вывести фамилии студентов, родившихся в 1996 году.
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме: