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

advertisement
Глава 3. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
ZGA 18.08.2010
6.3. Строковый тип данных
Символьный тип данных позволяет работать с отдельными символами. Для
обработки более крупных фрагментов текста - строк введен тип данных, который
так и называется: string - строка. Значениями переменных этого типа являются
строки любых символов длиной до 255.
Переменные этого типа должны быть описаны так:
Var имя: string;
или так Var имя: string[n];
В первом случае длина строки n по умолчанию не должна превышать 255
символов, во втором максимальное число символов n задается : 1 < n < 255.
Основные
действия,
которые
можно
выполнять
над
строковыми
переменными: ввод и вывод, присваивание, сравнение, соединение.
Ввод строковых переменных выполняется с помощью стандартных
процедур Read(str)и Readln(str). Обратим внимание на отличия ввода
числовых и строковых переменных.
Напомним, что при вводе значений нескольких числовых переменных
(Var
a,b,c:integer) одной процедурой read(a,b,c) в строке ввода
можно набрать несколько чисел или сразу все, отделяя их друг от друга
пробелами, и нажать Enter. При этом каждый набор отображается в окне вывода
в одну строку. Если в строке ввода набрать больше трех чисел, то будут
присвоены только первые три значения. Если набрать меньше трех чисел, то
программа будет ожидать продолжения ввода. При использовании процедуры
readln(a,b,c)
числа
вводят
по
одному
и
после
каждого
на
жимают Enter. При этом они отображаются в окне вывода в столбец.
Ввод значения строковой переменной (Var a,b,c: string) всегда
!
?
завершают нажатием клавиши Enter (пробел это обычный символ и его для
этой цели использовать нельзя). Поэтому, в программах на языке
PascalABC следующие варианты ввода выполняются аналогично:
read(a); read(b); read(c);
readln(a); readln(b); readln(c);
read(a,b,c);
readln(a,b,c);
Глава 3. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
ZGA 18.08.2010
Вывод строковых переменных выполняется с помощью стандартных
процедур Write(str) и Writeln(str) и не отличается от вывода данных
других типов. Процедура Write выводит значения в одну строку. При этом
выводимые значения необходимо отделять пробелами или иными символами
(например, запятой, точкой с запятой), иначе все они будут напечатаны слитно.
Процедура Writeln выводит каждое значение с новой строки (в столбец).
Пример 1. Составить программу, которая выполняет присваивание,
ввод и вывод слов разными способами.
Прежде всего. объявляем тип string (строковый) переменных a, b и c.
Переменной
a
присваиваем
некоторое
значение,
например
a:='Информатика'. С клавиатуры мы будем вводить слова ‘компьютер’ и
‘программы’ двумя способами. Запишем процедуры вывода этих слов тремя
способами с различными разделителями между словами.
Программа может выглядеть так:
Program Primer63_1;
Var a, b, c: string;
Begin
a:='Информатика';
read(b); read(c);
writeln(a, '. ', b, ', ', c);
read(b,c);
writeln(a, ': ', b, ' и ', c);
writeln(a, ' - ', b, ' ', c);
{ ввод, вариант 1}
{ вывод, вариант 1}
{ ввод, вариант 2}
{ вывод, вариант 2 }
{ вывод, вариант 3}
End.
Результат выполнения программы
может выглядеть так:
Среди всевозможных значений строк есть пустая строка. Она вводится
двумя апострофами (одинарными кавычками) без пробела между ними. А чтобы
записать апостроф в составе строки, его надо повторить дважды. Например,
процедура write('аб '' ява') выведет на экран слово: аб ' ява.
ZGA 18.08.2010
Глава 3. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
Заметим, что тип данных String обладает свойствами и простых и
составных типов. Например, при вводе и выводе строк используют имя строки
(свойство простой переменной).
С другой стороны, строка - это последовательность символов. Ее можно
рассматривать как совокупность из n символов – т.е. массив символов
(составной тип данных). К любому символу в строке можно обратиться так же,
как к элементу массива из n символов. Для этого после имени строки в
квадратных скобках надо указать индекс - порядковый номер символа в строке.
Если описана переменная S: string, то S[1] - это первый символ строки, S[2] второй и т.д. Например: S:= ‘ИНФОРМАТИКА’; S[3] = 'Ф'; S[5] = 'Р'.
Физическое представление строки приведено на рисунке
Заметим, что у элемента массива S[0] особая роль - хранить длину
строки. Значением S[0] является символ, код которого равен длине
строки (количеству символов в строке).
Пример 2. Составить программу, которая выводит символы
введенного с клавиатуры слова и их коды.
Будем рассматривать введенное слово s как массив символов. Значение
каждый из элементов можно вывести по его индексу, например, s[3] и
определить код с помощью функции ord(s[3]).
Program Primer63_2;
Var s : string;
Begin
write('введите слово: '); read(s);
{ ввод }
writeln('номер=3 символ ', s[3], ' код=', ord(s[3]));
writeln('номер=0 символ ', s[0], ' код=', ord(s[0]));
End.
Результат выполнения программы может выглядеть так (выводится
символ и его код, для нулевого символа равный длине строки):
Глава 3. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
ZGA 18.08.2010
Итак, элементы строки имеют индексы от 0 до n. В процессе обработки
данных для строки выделяется память, равная длине присвоенной ей строковой
переменной, увеличенной на единицу. Таким образом, ее длина может быть от 0
до n (не более 255) , а в оперативной памяти для нее отводится от 1 до (n+1)
байт.
При описании строковой переменной можно ограничить длину строки,
указав ее максимально возможный размер, например: var S: string[12]; Тогда в
этой переменной может храниться не более указанного количества символов.
Пример 3. Составить программу, которая выполняет
ввод и вывод части слова.
Program Primer63_3;
Var s: string[4];
begin
write('введите слово ');
write(s);
read(s);
{ ввод слова }
{ вывод значения переменной }
end.
Результат выполнения программы
может выглядеть так:
На практике для определения длины строковой переменной, т.е. количества
символов в ней, обычно используют функцию length(s).
Например: s:= ‘ИНФОРМАТИКА’; тогда переменной N:= length(s) будет
присвоено значение 11.
Пример 4. Составить программу, которая определяет, какое из двух введенных
с клавиатуры слов разной длины более длинное, и выводит это слово.
Алгоритм основан на сравнении длин слов length(a) и length(b).
Программа может выглядеть так:
Program Primer63_4;
Var a, b: string;
begin
writeln('введите два слова');
read(a,b);
{ ввод слов }
if length(a)>length(b) then writeln(a) else writeln(b);
end.
Глава 3. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
ZGA 18.08.2010
Результат выполнения программы
может выглядеть так:
Пример 5. С клавиатуры вводят два слова. Составить программу,
которая проверяет, не начинается ли второе слово
с той же буквы, которой оканчивается первое слово.
Алгоритм основан на определении номера последнего символа k (длины)
слова а и проверке выполнения условия a[k]=b[1].
Программа может выглядеть так:
Program Primer63_5;
Var a, b: string;
k : integer;
begin
writeln('введите два слова');
k:=length(a);
read(a,b);
{ ввод слов }
{ длина (номер последнего символа) слова а }
if a[k]=b[1] then writeln('Да') else writeln('Нет');
end.
Результат выполнения программы
может выглядеть так:
?
1.
2.
3.
4.
Какие действия можно выполнять над строковыми переменными?
В чем особенность ввода значений строковых переменных?
Как вывести слово камп’ютар?
Какую функцию используют для определения длины слова?
Упражнения
1. Составить программу, которая выводит на экран названия трех геометрических
фигур, которые вводятся с клавиатуры. Например, Геометрические фигуры: квадрат,
ромб, круг.
2. С клавиатуры вводится слово. Составить программу, которая:
а) определяет количество символов в нем;
б) проверяет, что оно не начинается и оканчивается на одну и ту же букву;
в) выводит на экран его первый, третий и последний символ;
г) определяет, четно или нечетно количество символов в нем.
Download