СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Символьные величины. Теория+решение

Категория: Информатика

Нажмите, чтобы узнать подробности

Тип string (строка) не входит в стандартный язык Паскаль, но он прочно вошел во все известные компиляторы с этого языка.

Просмотр содержимого документа
«Символьные величины. Теория+решение»

Строковый тип данных

Строка — упорядоченная последовательность символов.

Тип string (строка) не входит в стандартный язык Паскаль, но он прочно вошел во все известные компиляторы с этого языка.

Количество символов в строке называется ее длиной. Длина строки может лежать в диапазоне от 0 до 255.

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

Все переменные строковых типов совместимы между собой при выполнении различных операций (+) над строками.

В переменных строкового типа удобно хранить последовательности символов, обозначающие имена собственные, например, фамилии людей или географические названия. Именно для подобных данных над строками были введены операции сравнения. (Сравнение строк производится слева направо до первого несовпадающего символа. Та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки). Кроме того, можно выделить несколько общих операций над строками, которые часто применяются при решении совершенно различных задач. Эти операции были оформлены в виде стандартных процедур и функций.

Строковые процедуры

  • val(s,n,i) — переводит строку s в число (вещественное или целое, согласно типу переменной n), если строка s не является изображением числа соответствующего типа по правилам Паскаля, то значение переменной i будет отлично от нуля, при удачной конвертации значение i равно нулю;

  • str(i,s) — переводит число в его строковое представление;

  • delete(s,i,n) — удаляет из строки s n символов, начиная с символа с номером i;

  • insert(s1,s,i) — вставляет в строку s подстроку s1, перед символом с номером i

Строковые функции

  • copy(s,i,n) — выделяет из строки s подстроку длиной n, начиная с символа i;

  • concat(s1,s2,…,sN) — выполняет сцепление (конкатенацию) строк s1,s2,…,sN в одну строку;

  • length(s) — определяет реальную длину строки; результат – значение целого типа;

  • pos(s1,s) — выдает целое число – номер позиции в строке s, с которой начинается подстрока s1; если подстрока не найдена, то выдает ноль


Строковые переменные в языке Pascal описываются следующим образом:

var s: string [50];

(string в переводе строка). Объявление строки максимальной (255) длины еще короче:

var s: string;

Пример присваивания:

s:='String переводится как строка';

Ввод/вывод строк.

Для того, чтобы ввести строку s, достаточно написать readln(s); А чтобы вывести: writeln(s); И все!!! Т.е. вводятся и выводятся строки не поэлементно, как массивы, а целиком.

Pascal позволяет выполнять операции сравнения двух строк. Сравнение происходит посимвольно слева направо: сравниваются коды соответствующих символов до тех пор, пока не нарушится равенство или не кончится одна из строк (или обе сразу), при этом сразу делается вывод о знаке неравенства. Две строки называются равными, если они равны по длине и совпадают посимвольно.

Склеивание

Под склеиванием понимается последовательное объединение нескольких строк

, после выполнения оператора s:='Иван' + ' Васильевич'; в переменной s будет содержаться строка 'Иван Васильевич'. Как, Вы уже поняли, операция сложения строк обозначается +.


    1. Даны две строки. Объединить их в одну в порядке следования, разделив одним пробелом.


Решение:

Program pr3;

var s1, s2, s: string;

begin

writeln (’введите первую строку’);

readln(s1);

writeln (’введите вторую строку’);

readln(s2);

s : =Concat(s1, ’ ’, s2);

{или s : = s1+’ ’+ s2;}

writeln(’получили строку == ’,s);

end.


Длина строки.

Под длиной строки понимается фактическое (а не максимально возможное!) количество символов в строке. Это значение можно найти при помощи функции Length(str), результат которой – целое число, равное количеству символов


    1. Подсчитать сколько раз в данной строке встречается символ ’a’.

Решение:

Program pr1;

var s: string;

i, k: integer;

begin

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

readln(s);

k:=0;

for i:=1 to length(s) do

if s[i]=’a’

then k:=k+1;

writeln(’количество символов а равно’,k);

end.


    1. Определить сколько во введенной непустой строке символов ‘a

program n5_1;

var

a:string;

k,n,i:integer;

begin

writeln('BB a');readln(a);

n:= length(a); {определяем длину строки}

{проходим по строке от 1-го символа до последнего, просматриваем по одному символу и сравниваем с ‘a’, если а[i]=‘а’, то считаем количество}

for i:=1 to n do

if a[i]=' а'

then k:=k+1;

if k0

then writeln('к-во букв "а"=',k)

else writeln('букв "а" в строке нет');

readln

end.


    1. Дана программа подсчета количества букв А в строковой переменной:


Var t :string;

i,k:integer;


begin

k:=0;

t:=’ А роза упала на лапу Азора’;

for i:=1 to length (t) do

if t [i]=’a’ then k:=k+1;

writeln (k);

end.


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


Program Balance;

  Uses Crt;

  Var S: String; n, k, i : Integer;

BEGIN ClrScr;

   Write('Введите линейную запись математической формулы :'); 

  ReadLn(S);

  i:=1; k:=0; n:=Length(S);

  While (k=0) and (ido

  begin

  If S[i] = '(' then k:=k + 1;

  If S[i] = ')' then k:=k - 1;

  i:=i+1

  end;

    If k=0 then Write('Есть баланс ') else Write('Нет баланса ');

  ReadLn

END.


    1. Дана строка. Получить новую строку, путем записи символов в обратном порядке.

Решение:

Program pr4;

var s1, s: string;

i: integer;

begin

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

readln(s);

s1 : =’’; {начальное значение новой строки – пустой текст}

for i:=1 to length(s) do

s1:=s[i]+s1;

writeln(’обращенная строка == ’,s1);

end.


    1. Дано произвольное слово. Проверить, является ли оно палиндромом. Примеры палиндромов: казак, шалаш, мадам.

program n_5_2;

var x,x1:string;

n,i:integer;

begin

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

readln(x);

x1:=''; {х1 присваиваем значение пустой строки}

for i:=length(x) downto 1 do {проходим по введенному слову справа

x1:=x1+x[i]; на лево и формируем перевернутое слово х1}

if x1=x {сравниваем исходное и перевернутое слово}

then writeln('перевёртыш')

else writeln('не перевёртыш');

readln;

end.


    1. Дано слово. Записать каждый символ по два раза.

Пример ввода: Пример вывода:

дождь ддоожжддьь

Program stroki;

Var

s : string;

d,i : longint;

begin

readln(s); d:=length(s);

For i:=1 to d do write(s[i],s[i]);

end.



    1. Дано слово. Между всеми буквами вставить символ '-'.

Пример ввода: Пример вывода:

дождь д-о-ж-д-ь

Program stroki;

Var

s : string;

d,i : longint;

begin

readln(s); d:=length(s);

For i:=1 to d-1 do write(s[i],'-');

write(s[d]);

end.



    1. Дано слово. Добавить к слову это же слово, но только перевернутое.

Пример ввода: Пример вывода:

дождь дождььджод

Program stroki;

Var

s,p : string;

d,i : longint;

begin

readln(s); d:=length(s);

p:='';

For i:=1 to d do p:=s[i]+p;

writeln(s,p);

end.





Удаление из строки фрагмента.

Для удаления из строки фрагмента используется процедура Delete(str,n,m), которая вырезает из строки str m символов начиная с n-го, таким образом, сама строка изменяется.

Пример: Str1:=’abcdefgh’;

Delete(str1,3,4);

writeln(str1);

После выполнения этих операторов из строки будут удалены четыре символа начиная с третьего, т.е. строка будет такой: str1=’abgh’.


    1. Если в строке нечетное число символов, то удалить средний.

Решение:

program del;

var

st:string;

k: byte;

begin

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

readln(st);

k:=length(st);

if k mod 2=1

then delete(st, k div 2 +1, 1);

writeln('измененная строка: ',st);

end.



Вставка подстроки в строку.

Для вставки подстроки в строку используется процедура insert(str1, str2,n), которая вставляет строку str1 в строку str2 начиная с n-го символа, при этом первая строка остается такойже, как и была, а вторая получает новое значение.

Пример: str1:=’ABCDEFGH’;

str2:=’abcdefgh’;

insert(str1, str2,3);

В результате выполнения данной процедуры строка будет такой: str2=’abABCDEFGHcdefgh’. Этот же результат будет и после выполнения такой последовательности операторов:

str2:=’abcdefgh’;

insert(‘ABCDEFGH’, str2,3);


    1. Дана строка. Заменить в ней все вхождения подстроки ’ааа’ на подстроку ’а’.

Решение:

Пока такая подстрока встречается, необходимо находить номер первого символа очередного вхождения подстроки ’ааа’, удалять ’ааа’ и вставлять ’а’.

program zamena1;

var

st:string;

k: byte;

begin

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

readln(st);

While Pos('aaa',st)0 do

begin

k:=Pos('aaa',st);

delete(st,k,length('aaa'));

insert('a',st,k);

end;

writeln('измененная строка: ',st);

end.


    1. Дана строка. Заменить в ней все вхождения подстроки ’child’ на подстроку ’children’.

Решение:

На первый взгляд эта задача аналогична предыдущей, но та подстрока которую мы заменяем, входит в ту подстроку, которой мы заменяем. Поэтому решение этой задачи способом, рассмотренным в примере 2, приведет к зацикливанию. Будем решать эту задачу путем перебора всех символов строки (аналогично удалению и вставке элементов в одномерном массиве).

program zamena2;

var

s1,k,s,st:string;

i,d: byte;

begin

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

readln(st);

s:='child';

d:=length(s);

s1:='children';

for i:=length(st)-d+1 downto 1 do

begin

k:=copy(st,i,d);

if k=s

then begin

delete(st,i,d);

insert(s1,st,i);

end;

end;

writeln('измененная строка: ',st);

end.



Копирование.

Функция copy(Str,n,m) копирует m символов строки str начиная с n-го символа, при этом исходная строка не меняется.

Пример: str1:=’ABCDEFGH’;

str2:=’abcdefgh’;

str3:=copy(str1,4,3);

Writeln(str3);

Writeln(copy(str2,4,3));

writeln(str1);

Значение переменной str3=’DEF’. А на экран будут выведены следующие строки:

DEF

def

ABCDEFGH


    1. Подсчитать сколько раз в данной строке встречаются сочетания символов ’ова’.

Решение:

Program pr2;

var s: string;

i, k: integer;

begin

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

readln(s);

k:=0;

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

if copy(s,i,3)=’ова’

then k:=k+1;

writeln(’количество символов а равно’,k);

end.



    1. Дана программа подсчета количества сочетаний «ая» в строковой переменной:

Program strok;


Var

t :string;

i,k:integer;

begin

k:=0;

t:=’Красная прекрасная ужасная’;

for i:=1 to length (t)-1 do

if copy(t,i,2)=’aя’

then k:=k+1;

writeln (k);

end.



Поиск подстроки в строке.

Имеется функция, определяющая позицию подстроки в строке, – POS(str1,str2). Результат этой функции – целое число, и оно определяет номер элемента, с которого начинается первое вхождение подстроки str1 в строку str2. Если str1 не входит в str2, то значение функции равно 0.

Пример:


    1. Дано слово. Сформировать новое слово, в котором будут находится все цифры.

Пример ввода: Пример вывода:

A1B222a3cdjhs42442124 1222342442124


Program stroki;

Var

s,p,x : string;

d,i : longint;

begin

readln(s);

d:=length(s);

x:='1234567890';

p:='';

For i:=1 to d do

if pos(s[i],x)0

then p:=p+s[i];

writeln(p);

end.

    1. Дано предложение, состоящее из двух слов и в конце предложения стоит точка. Первое слово - существительное, второе слово - число. Надо вывести число.

Пример ввода: Пример вывода:

МИСТИКА 18237. 18237


Program stroki;

Var

s,p : string;

pr,pt : longint;

begin

read(s);

pr:=pos(' ',s);

pt:=pos('.',s);

p:=copy(s,pr+1,pt-pr-1);

write(p);

end.



    1. Дано слово. Удалить ненужные символы, '12abc,.' , в слове.

Пример ввода: Пример вывода:

1МbИСaТ,ИКА2. МИСТИКА


Program stroki;

Var

s,p,x : string;

i,d : longint;

begin

readln(s);

x:='12abc,.';

p:='';

d:=length(s);

For i:=1 to d do

if pos(s[i],x)=0 then p:=p+s[i];

writeln(p);

end.



Числа и строки.

Часто возникает необходимость получить строковое представление числа и наоборот (например, получить строку '13' из числа 13). Для работы с числами и строками применяются две процедуры.

Str(n, S) – переводит числовое значение n в строковое и присваивает результат строке S, причем можно переводить как целые числа, так и вещественные.

Примеры

str(1234, s) – после выполнения s=’1234’;

str(452.567,s) – переводим вещественное число с фиксированной запятой, результат s=’452.567’;

Val(str,n,k) – переводит строковое значение в числовое. Если данная строка действительно является записью числа (целого или вещественного), то значение k=0, а n – это искомое число, иначе k будет равно номеру первого символа, с которым процедура Val “не справилась”.

Примеры

Val(‘1234’, n, k) – n=1234, k=0;

Val(‘234.56’, n, k) – n =234.56, k=0;

Val(‘2.3456e+2’, n, k) – n=2.3456e+2, k=0;



    1. Дана строка. Выяснить, является ли она записью целого числа.

Решение:

program ex1;

var

st:string;

v,c: integer;

begin

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

readln(st);

val(st,v,c);

if c=0

then writeln('v=',)

else writeln(‘не является‘);

end.





    1. Преобразовать число х в строку.

Решение:

program ex2;

var

st:string;

x: integer;

begin

writeln('введите x');

readln(x);

Str(x, s);

writeln(s);

end.



    1. Дана строка. Подсчитать сумму встречающихся в ней цифр.

Решение:

program ex3;

var

s:string;

v,c,sum,i: integer;

begin

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

readln(s);

sum:=0;

for i:=1 to length(s) do

begin

val(s[i],v,c);

if c=0

then sum:=sum+v;

end;

writeln('sum=',sum);

end.



    1. Дана строка. Удалить из нее все символы не являющиеся цифрами.

Решение:

program ex3;

var

s:string;

v,c,i: integer;

begin

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

readln(s);

i:=1;

While ilength(s) do

begin

val(s[i],v,c);

if c0

then delete(s,i,1)

else inc(i);

end;

writeln('строка без букв –',s);

end.




    1. Дана строка содержащая цифры. Найти произведение этих цифр.

Program chisla;

var

a:string; i,code,s,p:integer;

begin

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

readln (a);

p:=1;

for i:=1 to length(a) do begin

if (a[i]='0') or (a[i]='1') or (a[i]='2') or (a[i]='3') or (a[i]='4') or (a[i]='5') or (a[i]='6') or (a[i]='7') or (a[i]='8') or (a[i]='9')

then begin val(a[i],s,code); p:=p*s; end;

end;

writeln ('p=',p);

readln;

end.

    1. Дано слово. Определить, состоит ли слово из одних цифр.

Пример ввода: Пример вывода:

How No

Пример ввода: Пример вывода:

123456 Yes

Program stroki;

Var

s,x : string;

d,i : longint;

begin

readln(s); d:=length(s);

x:='1234567890';

i:=1;

While (i0) do i:=i+1;

if id

then writeln('Yes')

else writeln('No');

end.

    1. Дано слово. Проверить, есть ли в составе слова цифры.

Пример ввода: Пример вывода:

How No

Пример ввода: Пример вывода:

It567ае Yes


Program stroki;

Var

s,x : string;

d,i : longint;

begin

readln(s); d:=length(s);

x:='1234567890';

i:=1;

While (i

if id

then writeln('No')

else writeln('Yes');

end.


    1. Дано два слова. Если все символы первого слова встречаются во втором слове (символы могут встречаться не по порядку), то вывести 'Yes', иначе - 'No'.

Формат ввода: Формат вывода:

s1 - первое слово Yes/No

s2 - второе слово

Пример ввода: Пример вывода:

МИСТИКА Yes

ГИМНАСТИКА

Пример ввода: Пример вывода:

ГРИМ No

ГИМНАСТИКА


Program stroki;

Var

sl1,sl2 : string;

i,d : longint;

begin

readln(sl1);

readln(sl2);

d:=length(sl1);

i:=1;

While (i0) do i:=i+1;

if id

then writeln('Yes')

else writeln('No');

end.













    1. Дана строка строчных английских букв. Преобразовать ее в строку заглавных букв.

Решение:

Var

s: string;

i: byte;

begin

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

Readln(s);

for i:=1 to length(s) do

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

writeln(s);

end.



    1. Дано слово. Если встречаются подряд одинаковые символы то вывести их.

Пример ввода: Пример вывода:

kdbbfjgkdjbnbbbbghjhjgkkk bbbbbbkkk

Program stroki;

Var

s,p : string;

d,i,j : longint;

begin

readln(s); s:=s+'_'; d:=length(s); p:='';

For i:=1 to d-1 do

if s[i]=s[i+1]

then p:=p+s[i]

else begin

if p'' then p:=p+s[i];

write(p);

p:='';

end;

end.



    1. Дано слово. Вывести новое слово, состоящее из различных символов.

Пример ввода: Пример вывода:

kdbbfjgkdjbnbbbbghjhjgkkk kdbfjgnh


Program stroki;

Var

s,w : string;

i,d : longint;

begin

readln(s); d:=length(s);

w:=s[1];

For i:=2 to d do

if pos(s[i],w)=0 then w:=w+s[i];

write(w);

end.