Краткая теория
Данные или переменные строкового типа условно можно считать одномерными массивами. Каждый элемент такого "массива" - это буква или символ. К отдельному символу можно обращаться по его номеру в строке, например, s[1], s[23], s[i], где i - целочисленная переменная, а s - это имя переменной строкового типа.
Для обозначения строкового типа в Паскале используется ключевое слово string.
Примеры объявления строковых переменных:
var
a, b : string;
s : string;
z : string[34];
Примеры объявления строковых констант:
const S = 'Nil de nihito fil.'; S1 = 'Repetitio Est Mater Studiorum.'; CAESAR = 'Veni, vidi, vici.'
Примеры
Пример 1. Вывести заданную строку на экран. Определить ее длину.
uses CRT; var s : string; d : Byte; begin ClrScr; s := 'Repetitio Est Mater Studiorum.'; WriteLn(s); d := Length(s); WriteLn('Length of string: ', d); end.
Пример 2. Вывести символы строки с заданными номерами n, k, t на экран.
uses CRT; var s : string; n, k, t : Byte; begin ClrScr; WriteLn('123456789012345678901234567890'); s := 'Veni, vidi, vici.'; WriteLn(s); n := 4; WriteLn(n, ' - ', s[n]); k := 9; WriteLn('s[', k,'] - ', s[k]); t := 19; WriteLn('s[', t,'] - ', s[t]); end.
Пример 3. Определите на каких позициях в строке находятся пробелы и подсчитайте их количество.
uses CRT; var s : string; d, i, k, n : Byte; begin ClrScr; WriteLn('123456789012345678901234567890'); s := 'Nulla Dies Sine Linea.'; WriteLn(s); d := Length(s); WriteLn('Length of string: ', d); n := 0; for i := 1 to d do begin if s[i] = ' ' then begin WriteLn(i); Inc(n); end; end; WriteLn('Num spaces: ', n); end.
Пример 4. Вывести на экран каждый второй символ строки. Вывести символы, номера которых кратны заданному числу k.
uses CRT; var s : string; i, d, k : Byte; begin ClrScr; WriteLn('123456789012345678901234567890'); s := 'Qui Vivra Verra!'; WriteLn(s); d := Length(s); WriteLn('Length of string: ', d); k := 5; for i := 1 to d do begin if (i mod 2) = 0 then WriteLn(s[i]); end; WriteLn; WriteLn('Pos: ', k); for i := 1 to d do begin if (i mod k) = 0 then WriteLn(s[i]); end; end.
Пример 5. Каждый k-й символ строки замените заданным знаком.
uses CRT; var s : string; i, d, k : Byte; t : Char; begin ClrScr; WriteLn('123456789012345678901234567890'); s := 'Quod erat demonstrandum.'; WriteLn(s); d := Length(s); WriteLn('Length of string: ', d); k := 5; t := ' '; WriteLn; for i := 1 to d do begin if (i mod k) = 0 then s[i] := t; end; WriteLn('123456789012345678901234567890'); WriteLn(s); end.
Упражнения
Замечание: в следующих упражнениях исходные данные следует присваивать или использовать константы, ввод с клавиатуры НЕ нужен.
1. Задайте символ, который нужно найти в заданной строке. Определите сколько раз он встречается в строке.
См. Пример 3.
2. Запишите символы строки из одной переменной в другую в обратном порядке.
Пример
s := '123456789'; d := Length(s); s1 := ''; for i := d downto 1 do begin s1 := s1 + s[i]; end;
3. Определите, сколько слов в заданном тексте, определите длину каждого слова и запишите эти числа в массив.
Пример. Упрощающее предположение: текст состоит из слов, каждая пара которых разделена ровно одним пробелом. Поэтому количество слов равно количеству пробелов плюс один.
{ 12345678901234567890 } s := 'Per aspera ad astra'; s := s + ' '; d := Length(s); w := 0; { Количество слов. } b := 1; { Начало первого слова. } for i := 1 to d do begin if s[i] = ' ' then begin Inc(w); { Увеличение счетчика слов. } z[w] := i - b; { Длина слова с номером w. } b := i + 1; { Начало следующего слова. } end; end;
4. Найдите в заданном тексте самое длинное слово, выведите это слово на экран.
5. Определить алфавит заданного текста.