Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uch_praktika_-_7_-_fayly.doc
Скачиваний:
5
Добавлен:
19.05.2015
Размер:
80.38 Кб
Скачать

5.2 Процедуры и функции по работе со строками

Действия над строками реализуются в Turbo Pascal с помощью следующих встроенных процедур и функций.

5.2.1 Функция Concat(S1[,S2,…,SN]): string– сцепляет (объединяет) строкиS1, S2,…, SN. Параметры, указанные в квадратных скобках, не являются обязательными.

Пример использования функции:

programpr3;

var

S: string;

begin

S := Concat('ABC', 'D');

writeln(S); {ABCD}

end.

Здесь и далее (в примерах использования строковых операторов) в фигурных скобках приводится выводимый на экран результат работы программы.

 

5.2.2 Функция Copy(S: string; Index, Count: integer): string– копирует из строкиSколичествоCountсимволов, начиная с символа с номеромIndex.

Пример:

program pr4;

var S: string;

begin

S := 'ABCDEF';

S := Copy(S, 2, 3);

writeln(S); {BCD}

end.

 

5.2.3 Функция Length(S: string):byte – определяет длину строки S.

Пример использования функции:

programpr5;

var

S: string;

begin

s:='ABCD';

Writeln(Length(S)); {4}

end.

 

5.2.4 Функция Pos(SubS, S: string):byte– отыскивает в строкеSпервое вхождение подстрокиSubSи определяет номер позиции, с которой она начинается. Если подстрока не найдена, то выдается 0.

Например:

programpr6;

varS:string;

begin

S:= ' 123.5';

{Замена всех пробелов нулями}

while Pos(' ', S) > 0 do

S[Pos(' ', S)] := '0';

writeln(S); {000123.5}

end.

 

5.2.5 Функция UpCase(C: char):char– преобразует строчную латинскую букву в прописную. Любые другие символы возвращаются без преобразования.

Пример:

programpr7;

var

s:string;

begin

s:='red';

s[1] := UpCase(s[1]);

writeln(s); {Red}

end.

 

5.2.6 Процедура Delete(var S: string; Index, Count: integer) – удаляет количество Count символов из строки S, начиная с символа с номером Index.

Пример использования процедуры:

programpr8;

var

s: string;

begin

s := 'Иванов Петр';

Delete(s,8,4);

writeln(s); {Иванов}

end.

 

5.2.7 Процедура Insert(SubS: string; var S: string; Index: integer) – вставляет подстроку SubS в строку S, начиная с символа с номером Index.

Пример:

program pr9;

var

S: string;

begin

S := 'Петр Иванов';

Insert('Петрович ', S, 6);

writeln(S); {Петр Петрович Иванов}

end.

 

5.2.8 Процедура Str(X [:Width [:Decimals]]; Var S: string)– преобразует числоХв строку символовS. ПараметрыWidth иDecimalsзадают формат преобразования (общую ширину поля и количество символов в дробной части соответственно).

Пример:

program pr10;

var

S: string[12];

begin

Str(5461, S);

writeln('Результат: '+S+' балл'); {Результат: 5461 балл}

end.

 

5.2.9 Процедура Val(S: String; var X; var Code: integer)– преобразует строковое значениеS в его численное представление X типаReal илиInteger. ПараметрCodeсодержит признак ошибки преобразования (0 – нет ошибки), например:

programpr11;

var I, Code: Integer;

S:string;

begin

S:='7908';

Val(S, I, Code);

writeln(I,' ',Code); {7908 0}

end.

  

5.3 Некоторые алгоритмы решения задач с использованием строковых переменных

Рассмотрим алгоритмы по работе со строковыми переменными на примере некоторых задач.

Задача 1.Задан список из 6 слов. Определить, сколько слов списка начинается на букву «п».

Одно из возможных решений данной задачи имеет следующий вид:

program z1;

var

s: string[20];

i,k:integer;

begin

k:=0;

for i:=1 to 6 do

begin

writeln('Введите слово');

readln(s);

if s[1]='п' then k:=k+1;

end;

writeln(k);

end.

 

В приведенной выше программе обработка слов происходит без их последующего хранения, т.е. на каждом шаге цикла переменной sприсваивается значение очередного слова и происходит сравнение первой буквыs[1]данного словаs с образцом 'п'.

Примечание. Аналогично можно определить и количество слов, заканчивающихся на ту или иную букву. В этом случае достаточно ввести некоторую промежуточную целочисленную переменнуюlen, служащую для обозначения длины словаsи вычисляемую какlength(s), после чего проводить сравнение последней буквыs[len]словаs с образцом.

 

Задача 2. Задан список из 8 слов. Найти самое короткое слово в списке. Если таких слов несколько, то распечатать их в один столбец.

Решение поставленной задачи сводится к нескольким этапам: ввести список слов в виде массива строковых переменных; подсчитать длину каждой строки; определить наименьшую из длин; распечатать те строки массива, длина которых совпадает с наименьшей.

Пример возможного решения поставленной задачи:

program z2;

type t=array[1..8] of string[20];

tt=array[1..8] of integer;

var s: t;

n: tt;

i, min: integer;

begin

for i:=1 to 8 do

begin

writeln('Введите слово');

readln(s[i]);

n[i]:=length(s[i]);

end;

min:=n[1];

for i:=2 to 8 do

if min>n[i] then min:=n[i];

for i:=1 to 8 do

if n[i]=min then writeln(s[i]);

end.

 

В данной программе для обозначения слов используется массив строковых переменных s, для обозначений соответствующих им длин слов – целочисленный массивn.Наименьший элемент массиваnхранится в виде переменнойmin.

 

Задача 3.Задана строка из двух слов, разделенных пробелом. Поменять в данной строке слова местами.

Пример программы-решения задачи:

programz3;

var s: string[40];

s1,s2: string[20];

i,n: integer;

begin

writeln('Введите строку');

readln(s);

n:=length(s);

i:=pos(' ', s);

s1:=copy(s, 1, i);

s2:=copy(s, i+1, n-i);

s:=s2 + ' ' + s1;

writeln(s);

end.

 

В данной программе переменная sслужит для обозначения строки из двух слов, переменныеs1иs2– для обозначения первого и второго слова строки соответственно. Алгоритм решения заключается в том, что сначала с помощью оператораposвыясняется, каким по счету символом в строкеsнаходится пробел. Далее в строке выделяются две подстроки: одна включает все символы левее пробела (первое слово), другая – правее пробела (второе слово). В конце программы слова сцепляются в обратном порядке с использованием разделяющего их пробела.

 

Задача 4. Пусть задана некоторая произвольная цифра. Создать программу, позволяющую вывести на экран название данной цифры в прописном виде, например, «5 – пять», «8 - восемь» и т.д.

Возможное решение задачи:

programz4;

var n:integer;

s:string[30];

begin

writeln('Введите цифру');

readln(n);

case n of

0: s:='ноль';

1: s:='один';

2: s:='два';

3: s:='три';

4: s:='четыре';

5: s:='пять';

6: s:='шесть';

7: s:='семь';

8: s:='восемь';

9: s:='девять';

else

s:=' ­ не является цифрой';

end;

writeln(n,' - ', s);

end.

 

В данной программе используется оператор множественного выбора CASE, позволяющий сопоставить каждой введенной цифре ее название. При попытке ввода чисел, не являющихся цифрами, на экран выдается сообщение «не является цифрой».

 

Задача 5. Задан двумерный строковый массив, состоящий из 3 строк и 4 столбцов. Выяснить, сколько раз встречается латинская буква «а» в первом и последнем столбцах массива и поменять данные столбцы местами.

Пример решения задачи:

programz5;

type mas=array[1..3,1..4] of string[10];

var s: mas;

i, j, k, n_1, n_4: integer;

c: string[10];

begin

for i:=1 to 3 do

for j:=1 to 4 do

begin

writeln('vvedite s[', i:2, j:2,']');

readln(s[i,j]);

end;

writeln('ishodnii masiv');

for i:=1 to 3 do

begin

for j:=1 to 4 do write(s[i,j]:10,' ');

writeln;

end;

n_1:=0;

n_4:=0;

for i:=1 to 3 do

for k:=1 to 10 do

begin

if s[i,1][k]='a' then n_1:=n_1+1;

if s[i,4][k]='a' then n_4:=n_4+1;

end;

for i:=1 to 3 do

begin

c:=s[i,1];

s[i,1]:=s[i,4];

s[i,4]:=c;

end;

writeln('V 1-m stolbze ',n_1, ' а');

writeln('V 4-m stolbze ',n_4, ' а');

writeln(‘Poluchenii masiv');

for i:=1 to 3 do

begin

for j:=1 to 4 do write(s[i,j]:10,' ');

writeln;

end;

end.

 

Здесь вспомогательная переменная сиспользуется при перестановке местами элементов первого и четвертого столбцов; переменныеn_1иn_4содержат количество букв «а» в первом и четвертом столбцах матрицы соответственно.

   

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]