МБОУ "Лицей №57"

Адрес: г.Прокопьевск, ул.Институтская, 41


E-mail: lyceum57@mail.ru

РАБОТА СО СТРОКАМИ

Тип String (строка) в Турбо Паскале широко используется для обработки текстов. Этот тип является стандартным и во многом похож на одномерный массив символов Array [0..N] of Char. Значение N соответствует количеству символов в строке и может меняться от 0 до 255. Символы, входящие в строку, занимают позиции с 1 до N. Начальный байт строки с индексом 0 содержит информацию о ее длине, т.е. это символ с кодом, равным длине строки.

Можно, также описывать переменные типа String[K], где K - целое число не больше 255. Так определяются строки с длиной не больше K. Этот тип уже не является стандартным. С символами строки можно работать как с элементами массива из символов, но в отличие от массивов, строки можно вводить целиком, сравнивать друг с другом и сцеплять операцией "+".

ПРИМЕР: Работа со строками.

var s,x,y,z:string;

begin

x:='turbo';

y:='pascal';

z:=x+' '+y; { z='turbo pascal' }

s:=''; { пустая строка }

for c:='a' to 'z' do s:=s+c; { s='abcd..xyz' }

writeln(s);

end.

Сравнение строк выполняется посимвольно в соответствии с их кодами до первого несовпадения. Если одна из строк закончилась до первого несовпадения, то она считается меньшей. Пустая строка меньше любой строки.

ПРИМЕР: Сравнение строк.

'abcd' > 'abcD' { 'd'>'D' }

'abcd' > 'abc' { 'd'>'' }

'abc' < 'axxc' { 'b'<'x' }

'abcd' = 'abcd'

Существует ряд стандартных функций и процедур для работы со строками.

  • Функция Length(s) выдает длину строки s.
  • Функция Concat(s1,s2,..,sn) возращает строку s1+s2+..+sn.
  • Функция Copy(s,p,k) возвращает фрагмент строки s, который начинается в позиции p и имеет длину k.
  • Функция Pos(s1,s) ищет первое вхождение подстроки s1 в строку s и возвращает номер первого символа s1 в строке s или 0 если не нашли.
  • Процедура Delete(s,p,k) удаляет из строки s фрагмент, который начинается в позиции p и имеет длину k.
  • Процедура Insert(s,s1,p) вставляет в строку s подстроку s1, начиная с заданной позиции p.

 Турбо паскаль позволяет производить преобразования числовых значений в строковые и наоборот. Для этого используются процедуры Str(X:n:d,S) и Val(S,X,e). Первая получает их числа X строку S с изображением этого числа, в которой не менее n символов и из них d знаков после запятой. Параметры n и d необязательные. Вторая процедура получает из строки S число X. При успешном результате e=0.

Задача 1.

Из заданной строки выделить подстроку длиной 6 знаков (либо до конца строки, если осталось меньше), которая начинается с первой встретившейся в строке, буквы ‘f’. Распечатать эту подстроку или выдать сообщение, что ее нет.

Решение:

Var s,s1:string; k:integer;

Begin

Readln(s);

k:=Pos('f', s);

If k=0 then writeln(‘Такой подстроки нет’)

Else begin S1:=copy(s,k,6);

writeln(s1);end;

End.

 

Алгоритм подсчета количества заданного символа в строке:

Var s:string; c:char; k, i: integer;

begin

Readln(s); read(c);

k:=0;

for i:=1 to length(s) do

if s[i]=c then k:=k+1;

Writeln(k);

End.

Алгоритм удаления всех пробелов в строке:

Var s:string; i: integer;

begin

Readln(s);

i:=1;

While i<= length(s) do

begin

if s[i]=‘ ‘ then delete(s,i,1) else i:=i+1;

End;

Writeln(s);

End.

Алгоритм поиска в строке подстроки длины k и подсчета количества:

Var s, s1:string; k, i: integer;

begin

Readln(s); readln(s1);

k:=length(s1);

for i:=1 to length(s)-k do

if copy(s, i,k)=s1 then k:=k+1;

Writeln(k);

End.

Алгоритм просмотра строки по словам:

Readln(s);

S:=s+' ';

repeat

k:=pos(' ',s);

c:=copy(s,1,k-1);

If {условие на с} then writeln(c);

delete(s,1,k);

until s='';

Задача 2.

Вводится текст, состоящий из слов, между которыми пробел. Поменяйте местами первое и последнее слово.

Решение:

Определим первое слово

k:=Pos(' ', s);

S1:=copy(s,1, k-1);

Определим последнее слово

i:=length(s);

While s[i]<>' ' do i:=i+1;

S2:=copy(s, i+1, length(s)-i);

Поменяем местами слова

Delete(s,i+1, length(s)-i);

Delete (s, 1, k-1);

S:=s2+s+s1;

Задача 3.

Вводится строка. Найдите все слова, содержащие букву «е».

Решение:

Рассмотрим подзадачу проверки содержит ли слово заданную букву. Реализуем решение подзадачи в виде подпрограммы-функции:

function yes(a:string):boolean;

var i: integer;

Begin

for i:=1 to length(a) do

if a[i]='e' then yes:=true else yes:=false;

end;

Решим основную задачу поиска всех слов, содержащих букву «е»

Readln(s);

S:=s+' ';

repeat

k:=pos(' ',s);

c:=copy(s,1,k-1);

If yes(c) then writeln(c);

delete(s,1,k);

until s='';

Алгоритм просмотра строки по словам:

Readln(s);

S:=s+' ';

repeat

k:=pos(' ',s);

c:=copy(s,1,k-1);

If {условие на с} then writeln(c);

delete(s,1,k);

until s='';

Задача 4.

Подсчитайте, сколько в заданном тексте содержится слов палиндромов.

Алгоритм решения:

  1. Составить подпрограмму проверки, является ли слово палиндромом. (Палиндром читается слева направо и справа налево одинаково).
  2. В основной программе выполнить поиск в строке по словам, проверяя для каждого взятого слова, является ли оно палиндромом.
  3. Если слово – палиндром, то насчитывать количество.
  4. Результат вывести на экран.

program z4;

var x,y:string;

i,j,k,l:integer;  f:boolean;

function per(s:string):boolean;

var c:string;

k,l,i:integer;

begin

c:='';

for i:=length(s) downto 1 do begin

  c:=c+s[i];end;

  if s=c then per:=true else per:=false;

end;

begin

writeln(‘введи строку’);  readln(x);

x:=x+' ';

repeat

k:=pos(' ',x);

c:=copy(x,1,k-1);

If per(c) then l:=l+1;

delete(x,1,k);

until x='';

end.

Задача 5.

Вводится строка. Найдите все слова, начинающиеся с заглавной буквы.

Решение:

В кодировочной таблице сначала располагаются  заглавные буквы, затем строчные. Коды заглавных букв располагаются от 65 до 90 или от 192 до 223.

Readln(s);

S:=s+' ';

repeat

k:=pos(' ',s);

c:=copy(s,1,k-1); n:=ord(c[1]);

If (n>=65) and (n<=90) or (n>=192) and (n<=223) then writeln(c);

delete(s,1,k);

until s='';

Обратная связь

Имя отправителя *:
E-mail отправителя *:
Тема письма:
Текст сообщения *:
Код безопасности *:

Задачи для самостоятельной работы

  1. Вводится строка. Найдите все слова, начинающиеся с буквы "д".
  2. Подсчитайте, сколько слов в заданной строке оканчивается буквой "и", если известно, что после слова обязательно стоит пробел или запятая.
  3. Вводится строка. Определите, на какую букву оканчивается третье слово.
  4. Дана строка символов. Преобразуйте данную строку, удалив из нее каждую пару символов "»" повторив (вставив еще раз) каждую пару символов "«". После преобразовании вывести полученную строку на экран.
  5. Задан одномерный массив, каждым элементом которого является строка символов, состоящая из одних цифр. Рассматривая каждую строку как число, определите сумму четных и нечетных значений элементов массива.
  6. Вводится строка. Проверьте, все ли слова имеют равную длину.
  7. Составьте программу подсчета числа повторений в тексте слов из заданного набора.
Бесплатный хостинг uCoz