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

Download Report

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

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

Строка – это последовательность символов определенной длины (от 0 до 255).

1

Описание переменной строкового типа

Var Str1:String[30]; Str2:String; Str1

– переменная строкового типа с максимальной длиной строки 30 символов. Если размер не указан, то максимальный размер автоматически принимается равным 255. Для строки из

n

символов в памяти отводится

n+1

байт;

n

байтов – для хранения символов строки, и один дополнительный (

0

) – для значения текущей длины строки. Например,

sadr: string[16] = ‘Ул. Чапаева, 5’

Номер байта Его значение 0 1 2 14 У л .

3 4 5 6 7 8 9 10 11 12 13 14 15 16 Ч а п а е в а , 5

Переменная строкового типа

Строка

похожа на одномерный массив символов: она имеет определенную длину, к каждому символу можно обратиться как к элементу одномерного массива

Str1: array [0..n] of char;

Аналогично:

Str1[i]

– это обращение к

i

му элементу строки

Str1

.

Внимание!

Переменная тип

String

вводится и выводится не поэлементно, как массив, а

сразу целиком.

3

Операции со строками

операция сцепления

(

склеивание

) последовательное объединение нескольких строк. Знак операции – ‘ + ’.

Var str1, str2,str3:String[20]; … Str1:=‘У Егорки’; Str2:=‘всегда отговорки’; Str3:=Str1+’ ‘+Str2;

Строка

Str3

имеет значение ‘

У Егорки всегда отговорки’

.

То же самое получим в результате:

Str3 :=Str1+’ всегда’+’ отговорки’;

(или)

Str3:= Concat (Str1,’ ‘,Str2);

4

Сравнение

Сравнение двух строк происходит

посимвольно слева направо

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

‘Balkon’ < ‘balkon’

{ Ord(‘B’) < Ord(‘b’)}

‘balkon’ > ‘balken’ ‘balkon’ > ‘balk’ ‘кошка ’ > ’кошка’ ‘Кот’ = ‘Кот’

{ Ord(‘o’) < Ord(‘e’)} { длина первой строки больше} { длина первой строки больше} { равны по длине и совпадают посимвольно} Результат этих операций – одно из значений:

True

или

Стандартная

процедура Удаление

delete(Str,n,m)

– вырезает из строки

Str m

символов, начиная с

n

го,

таким образом строка изменяется.

Пример. Дан фрагмент программы:

str1:=‘ABCDEFGH’; delete(str1,3,4); writeln(str1);

После выполнения этих операторов из строки будут удалены 4 символа, начиная с третьего. Будет напечатано: 6

ABGH

Стандартная

процедура

Вставка

insert(Str1,Str2,n)

– вставка строки

Str1 Str2

, начиная с

n

го символа, при этом

Str1

остается такой же,

Str2

в строку получит новое значение.

Пример. Дан фрагмент программы:

str1:=‘ABCDEFGH’; str2 :=‘abcdefgh’; insert(str1,str2,3); writeln(str1);

После выполнения этих операторов:

str1:=‘abABCDEFGHcdefgh’;

7

Стандартная

функция

Копирование copy(Str,n,m)

– копирует

m

символов строки

Str,

начиная с

n

го символа, при этом исходная строка не меняется. Результат этой функции можно присвоить другой строке или сразу выводить его на экран.

Пример. Дан фрагмент программы:

str1:=‘ABCDEFGH’; str2 :=‘abcdefgh’; str3:=Copy(str1,4,3); writeln(str3); writeln(Copy(str2,4,3));

После выполнения этих операторов на экран будет выведено:

DEF def

8

Стандартная

функция Длина строки

Length(Str)

– определяет количество введенных символов в строке. Результат – целое число.

Пример. Дан фрагмент программы:

str1:=‘ABCDEFGH’; str2 :=‘Мама мыла раму.’; k1:=Length(str1); k2:=Length(str2);

После выполнения этих операторов переменные:

k1=8, k2=15.

9

Стандартная

функция

Подстрока

Pos(Str1,Str2)

– определяет номер первого элемента, с которого начинается первое вхождение подстроки

str1

в строку

str2

. Результат – целое число. Если такой подстроки нет, то значение функции равно

0

.

Пример 1. Дан фрагмент программы:

str1:=‘CDE’; str2 :=‘ABCDEFGH’; k1:=pos(str1,str2); k2:= pos(str2,str1);

После выполнения этих операторов переменные:

k1=3

,

так как строка символа

str1

встречается в строке

str2

с 3-го

k2=0

,

так как такой подстроки нет

.

Пример 2.

k1:=Pos(‘ша’,’Наша Маша громко плачет.’); k1

равно

3

. Выбирается номер 1-го элемента 1-й встречи.

10

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

Число 13 и строка ’13’ – это не одно и то же. Для работы с числами и строками применяются две процедуры.

11

Стандартная

процедура

Str(N,st1)

– переводит числовое значение

N

(целое или вещественное) в строковое и присваивает результат строке

st1

.

Примеры:

Str(1234,st1)

– после выполнения

st1=‘1234’; Str(452.567,st1)

– результат –

st1=‘452.567’; Str( 4.52567е+2,st1)

– в итоге:

st1=‘4.52567е+2’;

12

Стандартная

процедура

Val(st1,N,k)

то значение

k=0

– переводит строковое значение в числовое, если данная строка действительно является записью числа (целого или вещественного), , а

N

– это число, иначе номеру символа, в котором встречается первое нарушение записи числа

N

.

k

будет равно

Примеры:

Val(‘1234’,n,k) – n=1234, k=0; Val(‘452.567’,n,k) – n=452.567, k=0; Val(‘4.52567е+2’, n,k) – n= 4.52567е+2, k=0; Val(’12-45’, n,k) – k=3;

(знак ‘-’ может быть только на первом месте)

Val(’2,567m’, n,k) – k=2;

(целая и дробная части разделяются точкой)

Val(’5.87c-5’, n,k) – k=5;

13 (символ ‘c’ не допустим в записи числа)

1.

Задачи

Сколько раз в данной строке встречается символ ‘

a

’.

2.

Сколько раз встречаются гласные буквы?

3.

4.

5.

Заменить все вхождения подстроки

st1

на подстроку

st2

, которые вводятся с клавиатуры.

Строка состоит из нескольких слов. Между словами стоит один пробел, в конце предложения – точка. Посчитать количество слов и вывести на экран только те из них, которые начинаются с буквы ‘

а

’ (слов не более 30).

Строка содержит одно слово. Проверить, читается ли оно одинаково справа налево и слева направо (т.е. является ли оно палиндромом) 14

6.

7.

8.

9.

Дана строка. Определить, сколько раз входит в нее подстрока ‘

abc’

.

Дана строка. Посчитать количество букв ‘ последнем ее слове.

k’

в Дана строка. Указать те слова, которые содержат хотя бы одну букву ‘

k’

.

В строке удалить символы двоеточия и подсчитать количество удаленных символов.

10.

Удалить часть символьной строки, заключенной в скобки (вместе со скобками).

11.

В записи слова зашифрованы – каждое из них записано наоборот. Расшифровать сообщение.

12.

Проверить, одинаковое ли число открывающих и закрывающих скобок в данной строке. 15

13.

Дана последовательность слов. Напечатать все слова, отличные от слова ‘hello’.

14.

Дана последовательность слов. Напечатать все слова в алфавитном порядке.

15.

Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по одному разу.

16.

Составить программу вывода самой большой цифры в записи заданного числа.

17.

Найти сумму всех чисел строки. 18.

В заданной строке удалить все лишние пробелы.

19.

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

program ctroka; const n=30; type mas_str=array[1..n] of string; var A:mas_str; str:string; k:byte; i:integer; procedure Init(var b:mas_str); { формирует массив из отдельных слов} begin k:=1; b[k]:=''; {пока не встретится пробел формируем очередное слово k, прибавляя по одной букве}

( Какую задачу решает данная программа?

If str[i]<>' ‘ then b[k]:=b[k]+str[i] else {если это не последний символ, то увеличиваем счетчик слов и If i<> length(str)-1 then begin Inc(k); b[k]:='' end; end; begin writeln(‘Введите предложение'); readln(str); Init(A); writeln(‘Всего слов: ',k); {просматривая слова в массиве, выводим те, которые начинаются с ‘a’} For i:=1 to k do If A[i][1]=‘a' then write(A[i],' '); readln end.

17

function Sum(st:string):integer; var i,k,d:byte; s:integer; begin s:=0; {

находит сумму всех цифр данной строки

} for i:=1 to length(st) do begin val(st[i],d,k); if k=0 then s:=s+d; end; sum:=s; end;

Какие задачи решают данные подпрограммы? (Впишите комментарий)

} begin k:=0; for i:=1 to length(st) do if st[i]='a' then inc(k); simv:=k; end; procedure ins(var st:string); {

заменяет все вхождения подстроки

} var k:byte; {

'del' на 'insert’

} begin while pos('del',st)<>0 do begin k:=pos('del',st); delete(st,k,length('del')); insert('insert',st,k); end; end;