В данной статье рассмотрим основные функции работы со строками в Паскале, а также совместное использование массивов и строк при решении задач. После обзора данной темы будут предложены задачи для самостоятельного решения.
Строковые функции
length(s); s — строковая переменная (тип string)
Пример:
s:='Мама мыла раму';
n:=length(s);
writeln('Количество букв в строке = ',n)
В данном примере на экране мы увидим число 14 (пробел — тоже символ)
copy (s, n, l); s — переменная типа string, n — номер символа с которого начинается подстрока (тип integer), l — количество символов в подстроке (тип integer).
Пример:
s:='Мама мыла раму';
subs:=copy(s, 6, 4);
writeln(subs);
В данном примере на экране мы увидим слово мыла (т.к. «м» — шестой символ строки s, и в подстроке мы выделяем 4 символа)
concat(s1, s2, …); — возвращает строку, являющуюся объединением строк, указанных при вызове функции.
Пример:
s1:='Мама ';
s2:='мыла ';
s3:='раму';
s:=concat(s1, s2, s3);
writeln(s);
На экране мы увидим строку: «Мама мыла раму»
delete(s, n, l); — удаляет из строки s её часть, которая начинается с символа с номером n и состоит из l символов
Пример:
s:='Мама мыла раму';
s:=delete(s, 6, 5);
writeln(subs);
В данном примере на экране мы увидим: «Мама раму» (удаляем 5 символов: 4 буквы и 1 пробел)
chr(n); — возвращает символ с указанным кодом
Рассмотрим таблицу символов ASCII
Пример:
s:=chr(90);
writeln(s);
На экране мы увидим символ Z
pos(s, subs); — возвращает позицию (номер символа) подстроки в строке.
val(s, num, error); — выполняет преобразование строки s, изображающие целое или вещественное число, в число num. Если преобразование выполнен успешно, то значение переменной error=0. Если преобразование не может быть выполнено, то в переменную error записывается номер символа строки, который является причиной неудачи преобразования.
Использование массивов при работе со строками
При решении задач со стоками удобно использовать массивы: помещать элементы строки символов в массив. Для этого можно использовать цикл со счетчиком, функции length и copy :
st:="Hello"; for i:=1 to length(st) do ar[i]:=copy(st,i,1);
В цикле от 1 до длины строки st каждому элементу массива ar присваивается подстрока, состоящая из одного i-го символа.
Рассмотрим полный текст программы с выводом полученного массива на экран:
var st:string; i:integer; ar: array[1..20] of string; begin st:='Hello'; //задается строка for i:=1 to length(st) do ar[i]:=copy(st,i,1); //помещаем строку в массив for i:=1 to length(st) do // выводим массив на экран write(ar[i],' '); end.
Задача.
Заменить в строке Мама мыла раму буквы а на знак _. Вывести полученный массив на экран.
Решение
var st:string; i:integer; ar: array[1..20] of string; begin st:='Мама мыла раму'; //задается строка for i:=1 to length(st) do ar[i]:=copy(st,i,1); //помещаем строку в массив for i:=1 to length(st) do begin if ar[i]='a' then ar[i]:='_'; write(ar[i],' '); // выводим массив на экран end; end.
Получим: М _ м _ м ы л _ р _ м у
Задачи для самостоятельного выполнения:
- Удалить из введенной строки все гласные буквы и вывести результат на экран.
- Введенную строку вывести в обратном порядке (с последней буквы начинается и первой заканчивается)
- Посчитать количество гласных букв в введенной строке
- Вывести на экран результат выражения, записанного в виде «a + b» (где а и b некоторые двухзначные числа)
В задаче на замену буквы «а» на пробел, есть ошибка
Под словом будем понимать любую последовательность латинских букв, которая заканчивается пробелом или знаком препинания или стоит в конце строки. Решение задачи похоже на решение задачи 11, но в данном случае в процессе выделения очередного слова подсчитывается и его длина.