В разделе "Типы данных" в курсе информатики особое место занимают строки. Эти структуры данных встречаются во множестве заданий ЕГЭ и требуют чёткого понимания базовых операций и приёмов работы с ними. Особенно актуально это для школьников, готовящихся к экзамену.
Строка — это упорядоченная последовательность символов. Каждый символ имеет свой номер (индекс), начиная с 1, и доступ к нему можно получить в любой момент с помощью квадратных скобок. Например, s[3] — это третий символ строки s. Подробнее о строках и символах – здесь.
В языке Паскаль строка обозначается типом string. Максимальная длина строки может быть задана явно, например:
var
s: string[255];
Если размер не указан, по умолчанию используется длина до 255 символов.
В языке Паскаль доступны следующие стандартные операции:
|
Операция |
Описание |
|
Length(s) |
Возвращает длину строки s |
|
s[i] |
Возвращает i-й символ строки |
|
Copy(s, i, n) |
Возвращает подстроку длиной n с позиции i |
|
Pos(sub, s) |
Возвращает позицию подстроки sub в s |
|
Delete(s, i, n) |
Удаляет n символов из строки с позиции i |
|
Insert(sub, s, i) |
Вставляет подстроку sub в s с позиции i |
|
Concat(s1, s2) |
Объединяет строки s1 и s2 |
Работа со строками требует аккуратности: ошибки в индексации могут привести к некорректным результатам.
На ЕГЭ по информатике задачи, связанные со строками, можно условно разделить на несколько групп:
1. Подсчёт символов и подстрок
2. Поиск и обработка подстрок
3. Обработка строковых шаблонов
4. Генерация строк
5. Анализ текстов и логических структур
Пример 1: Подсчёт количества символов
Задание: Подсчитать количество букв «А» в строке.
var
s: string;
i, count: integer;
begin
readln(s);
count := 0;
for i := 1 to Length(s) do
if s[i] = 'А' then
count := count + 1;
writeln('Количество А: ', count);
end.
Пояснение: Цикл по всем символам строки проверяет, является ли текущий символ буквой «А». Если да — счётчик увеличивается.
Пример 2: Проверка наличия подстроки
Задание: Определить, содержится ли подстрока 'abc' в строке.
var
s: string;
posSub: integer;
begin
readln(s);
posSub := Pos('abc', s);
if posSub > 0 then
writeln('Подстрока найдена')
else
writeln('Подстрока не найдена');
end.
Пояснение: Функция Pos возвращает номер начала подстроки, если она найдена, или 0, если подстрока отсутствует.
Пример 3: Замена символов
Задание: Заменить все символы «*» на пробелы.
var
s: string;
i: integer;
begin
readln(s);
for i := 1 to Length(s) do
if s[i] = '*' then
s[i] := ' ';
writeln(s);
end.
Пояснение: Каждый символ строки проверяется, и если он равен '*', то заменяется на пробел.
|
Ошибка |
Как избежать |
|
Индексация с 0 вместо 1 |
В Паскале строки индексируются с 1 |
|
Использование = для сравнения строк полностью |
Лучше использовать if s = 'abc' |
|
Путаница с функцией Copy и параметрами |
Помнить: Copy(строка, позиция, длина) |
|
Ошибка с Pos при отсутствии подстроки |
Проверяйте, что результат больше 0 |
Отработайте базовые функции на простых задачах (можно на разных языках, чтобы не допускать синтаксических ошибок).
Разбирайте сложные задачи с условиями: что должно быть внутри строки, как искать подстроки, как производить замену.
Уделите внимание пробелам, знакам препинания и регистрам — это часто приводит к ошибкам.
Придумывайте свои задачи и решайте их — это поможет закрепить навыки.
|
Функция/оператор |
Назначение |
Пример использования |
|
Length(s) |
Получить длину строки |
n := Length(s); |
|
s[i] |
Доступ к символу с номером i |
c := s[1]; |
|
Copy(s, i, n) |
Взять подстроку из строки |
part := Copy(s, 2, 3); |
|
Pos(sub, s) |
Найти позицию подстроки sub в строке s |
k := Pos('abc', s); |
|
Delete(s, i, n) |
Удалить n символов с позиции i |
Delete(s, 1, 2); |
|
Insert(sub, s, i) |
Вставить sub в строку s с позиции i |
Insert('xy', s, 3); |
В заключение важно подчеркнуть: строки — это не просто набор букв, а мощный инструмент для анализа и преобразования данных. Внимательное изучение операций со строками на Паскале и регулярная практика помогут вам уверенно чувствовать себя на ЕГЭ по информатике и успешно решать даже сложные задачи на обработку текста.
Умея видеть разницу между массивом Char и типом String, можно легко преобразовывать и редактировать тексты.
Вопрос 1. Что вернёт функция Length('Паскаль')?
А) 6
Б) 7
В) 8
Г) 0
Вопрос 2. Что выведет следующий код?
writeln('abc'[2]);
А) a
Б) b
В) c
Г) Ошибка выполнения
Вопрос 3. Что делает функция Pos('ab', 'abcabc')?
А) Возвращает 0
Б) Возвращает 2
В) Возвращает 1
Г) Возвращает 4
Вопрос 4. Какая процедура используется для удаления части строки?
А) Delete
Б) Cut
В) Remove
Г) Erase
Вопрос 5. Чему будет равна переменная s после выполнения следующего кода?
s := 'Информатика';
Delete(s, 5, 4);
А) Инфорика
Б) Инма
В) Инфа
Г) Инмтика
Вопрос 6. Какая из функций возвращает подстроку заданной длины?
А) Slice
Б) Part
В) Copy
Г) Take
Вопрос 7. Какая строка будет результатом выполнения?
s := 'abc';
Insert('x', s, 2);
А) axbc
Б) abxc
В) xabc
Г) acbx
Вопрос 8. Сколько раз встречается символ 'а' в строке 'параллелограмм'?
А) 2
Б) 3
В) 4
Г) 5