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;