Строки. Обзор
Строка - это список (или последовательность) символов, расположенных в определенном порядке. Вся последовательность символов рассматривается как единый объект.
Символом является все, что вы можете набрать на клавиатуре в одно нажатие клавиши (буква, цифра, обратная косая черта или другой какой-либо символ).
Строки могут иметь пробелы : "Привет, мир!".
Пустая строка является строкой, которая имеет 0 символов.
Паскаль признает в качестве строк все, что записано в апострофах ( ' ' ).
В языке Pascal строка относится к типу string .
Записать новое значение в строку можно с помощью оператора ввода
read(s);
Также можно просто присвоить переменной какое-либо строковое значение, например
s := 'Питон';
Можно определить длину строку, используя встроенную функцию length
n := length(s)
Сравнение строк
Строки можно сравнивать между собой так же, как и числа. Можно определить, какая из строк больше, какая - меньше.
При сравнении строк сравниваются коды символов. Существуют десятки, если не сотни, кодировок символов. Понять эту концепцию легче всего, разобрав одну из самых простых, ASCII (почитайте про нее здесь).
Необходимо понять, что в современных кодировках и русские, и английские буквы расположены в алфавитном порядке, цифры также идут от меньшей к большей.
Например, в таблице ASCII-кодов код английской буквы 'A' - 65, буквы 'a' - 97, цифра '0' имеет код 48. Русские буквы расположены в расширенной части таблицы ASCII-кодов (номера с 128 по 255). Заглавные буквы стоят раньше (то есть имеют код меньше), чем строчные.
В большинстве используемых кодировочных таблицах закономерности такие же, строчные буквы стоят позже заглавных, цифры раньше букв, а русские буквы позже английских.
Например: "паровоз" < "пароход", потому что слова различаются в пятой букве и "в" < "х".
|
К сожалению, в Паскале нет функции, которая бы позволяла считывать несколько строк, разделённых пробелом, из одной строки. Для этого придётся написать свою функцию:
var s, w: string;
i, j, ind: integer;
a: array of string;
begin
readln(s);
setlength(a, length(s));
i := 1;
ind := 0;
while i < length(s) do
begin
while (i < length(s)) and ('' + s[i] = ' ') do i += 1;
j := i + 1;
w := '' + s[i];
while (j < length(s)) and ('' +s[j] <> ' ') do begin
w += s[j];
j += 1;
end;
a[ind] := w;
ind += 1;
i := j;
end;
write(a[0], a[1]);
end.
В результате мы получаем массив строк.
|
Строки можно складывать, для этого используется знак "+". Эту операцию называют сцеплением строк или конкатенацией.
Например,
s := 'Привет, ';
s1 := 'мир';
writeln(s + s1);
На экране появится фраза " Привет, мир" (без кавычек).
|
Обращение к индексам строки
Каждый символ строки имеет свой номер (называется индексом), причем индексация в языке программирования Паскаль начинается с единицы. То есть, первый символ имеет индекс 1, второй - 2 и т.д.
К символам строк можно обращаться по индексам, которые указываются в квадратных скобках s[i] .
Пример
Строка S |
H |
e |
l |
l |
o |
Индекс |
S[1] |
S[2] |
S[3] |
S[4] |
S[5] |
P.S. Многие методы строк в PascalABC.NET считают, что строки индексируются с нуля. Мы не будем пока использовать такие методы строк, которые работают с индексами, индексируемыми с нуля. Для них существуют эквивалентные замены внешними функциями, которые предполагают, что строки индексируются с 1.
|
Поскольку к символу можно обращаться по индексу, для перебора всех символов можно использовать цикл по переменной, которая будет принимать возможные значения индексов. Например, программа, которая выводит на экран все коды символов строки s будет выглядеть так
for i := 1 to length(s) do
writeln(s[i], ord(s[i]))
Пояснения к программе:
1) Функция length(s) находит длину строки. Индекс первого символа равен 1, а индекс последнего length(s). Переменная цикла i как раз и будет принимать последовательно значения от 1 до length(s).
2) В каждой строке сначала будет выводиться сам символ, а затем его код, который возвращает встроенная функция ord()
Такой же перебор можно записать короче:
for c in s do
writeln(c, ord(c));
В данном фрагменте заголовок цикла перебирает все символы s, помещая их по очереди в переменную c.
Особенность Pascal при работе со строками заключается в том, что строки - это изменяемые объекты. Другими словами, мы можем изменять отдельные символы строки.
Например, сработает следующий оператор
s[5] := 'a';
Также можно составлять из символов новую строку с требуемыми изменениями.
Например, программа, которая заменяет все символы 'a' на символы 'b' будет выглядеть следующим образом:
read(s);
for i := 1 to length(s) do begin
if s[i] = 'a'then s[i] := 'b';
end;
writeln(s);
В данном примере в цикле перебираем все символы строки s. В теле цикла проверяем значение переменной s[i]: если символ совпадает с символом 'a', то заменяем его на 'b'.
|
Функция count()
Функция count() в Python помогает нам узнать, сколько раз определенная подстрока (последовательность символов) или отдельный символ встречается в строке.
Пример
text = "Привет, мир! Привет, как дела?"
cnt = text.count("Привет")
print(cnt) # Вывод: 2
Что происходит в примере?
- Мы создали строку
text , в которой написано "Привет, мир! Привет, как дела?".
- Затем мы использовали
count("Привет") , чтобы узнать, сколько раз слово "Привет" встречается в строке.
- В результате мы получили 2, потому что "Привет" встречается дважды.
|