Мегаобучалка Главная | О нас | Обратная связь


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



2015-12-06 858 Обсуждений (0)
Строковый тип данных String 0.00 из 5.00 0 оценок




СТАНДАРТНЫЕ ТИПЫ ДАННЫХ

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

 

Символьный тип данных

Pascal оперирует с символьной информацией, которая может быть представлена отдельными символами или стро­ками символов. Для хранения и обработки отдельных символов исполь­зуются переменные типа Char. Символьные данные могут быть либо константами, либо переменными. Переменная символьного типа должна быть объявлена в разделе описания переменных так:

<Имя> : Char; где имя — имя переменной символьного типа;

Пример 1.

VAR OTV: Char ; {переменной OTV присвоен тип Char}

СН: Char; {переменной СН присвоен тип Char}

Значениями типа Char служат все символы, которые могут высветиться на экране дисплея: цифры, буквы, знаки опера­ций, специальные символы и т. д. Переменная, объявленная как Char, может принимать значение только одного символа.

Переменная типа Char может получить значение в ре­зультате выполнения операции присваивания или ввода (Read, ReadLn).

Все символы упорядочены, то есть каждый из них имеет свой порядковый номер - код. Для кодировки символов ис­пользуется код ASCII (American Standard Code For Informa­tion Interchange — американский стандартный код для обме­на информацией). Для хранения символа отводится один байт. Мы имеем возможность закодировать 256 символов в диапазоне 0..255 Символы с кодами 0..31 относятся к слу­жебным кодам.

 

Базовая таблица кодировки ASCII

  ® Р * p
! А а q
В R b г
# С S с s
$ D T d t
% Е U е u
& F V f v
' G W g w
( Н X h x
) I Y i y
* : J Z j z
+ ; К [ k {
> < L \ l ?
- = М ] m }
. > N ^ n ~
/ ? О _ o  

 

В том случае, если в программе требуется использовать значение символьной переменной или константы, его необ­ходимо заключить в апострофы или записать с использова­нием знака #, за которым следует код символа.

Например, 'А' обозначает букву А, ';' - точку с запятой, '' - пробел, #32 или #$20 являются также символами пробела (32 - это код, соответствующий пробелу, а шестнадцатеричное число 20 равно десятичному 32).

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

#07 (BEL) - подача короткого звукового сигнала;

#08 (BS) - удаление символа слева от курсора и сме­щение курсора на одну позицию назад, соответствует клави­ше <BackSpace>;

#09 (НТ) - горизонтальная табуляция: смещение кур­сора в позицию, кратную 8, плюс 1 (9, 17, 25 и т. д.), соответ­ствует клавише <Таб>;

#10 (LF) - перевод строки, курсор смещается по вер­тикали вниз на одну строку;

#11 (VT) - вертикальная табуляция;

#12 (FF) - прогон страницы;

#13 (CR) - возврат каретки или перевод строки, вы­полняет перемещение курсора в начало следующей строки экрана (соответствует клавише <Enter>);

#26 (SUB) - конец файла, вводится нажатием комби­нации клавиш <Ctrl> + <Z>;

#27 (ESC) - конец работы, символ соответствует кла­више <Esc>;

#32 (BL) - пробел и т. д.

Переменную типа Char можно сравнить с другой пере­менной типа Char или с символьной константой. Результатом операции сравнения является логическая константа TRUE (истина) или FALSE (ложь). Сравнение основано на том, что каждому символу поставлено в соответствие число, причем символу '0' соответствует число меньшее, чем символу '9', символу 'А' - меньшее, чем 'В' и т. д. Таким образом, можно записать:' 0 ' < ' 1 ' < ...' 9 '... <' А' <' В ' < ... <' Z' <.' а' < ' b ' < ...< ' z '. Символам русского алфавита соответ­ствуют числа большие, чем символам латинского алфавита, при этом справедливо следующее: ' А ' < ' Б ' <' С '...<' Ю ' <'Я'<'а'<'б'<'в'<... <'э'<'ю'<'я'.

Строчные латинские буквы идут друг за другом, не пе­ремешиваясь с другими символами, точно также прописные буквы, цифры, русские буквы строчные и прописные. Из всех символов составлен список, и из двух символов меньше тот, который встречается в списке раньше (а > b, а < b, а < > b).

Мы можем использовать упорядоченность множества символов и, в случае необходимости, объявлять переменную цикла со счетчиком типом Char:

For k: = ' а' То' z' Do;

К символьным данным (тип Char) можно применять встроенные функции:

 

Наименование Имя функции Тип аргумента Тип результата
Возвращает значение символа по его коду Chr(x) Byte Символьный
Возвращает порядковый номер Ord(ch) Символьный Целый тип
Возвращает значение, которое соответствует Ord(х)-1 (предыдущий символ) Pread (ch) Символьный Символьный
Возвращает значение, которое соотв. Ord(х )+1 (следующий символ) Succ (ch) Символьный Символьный
Преобразует строчную букву в заглавную. Обра­батывает только буквы латинского алфавита. Upcase (ch) Символьный Символьный

 

Например:

Ord ('А') = 65 - функция возвращает код заглавной латинской буквы А (65).

Chr (128) = 'Б' - функция возвращает заглавную рус­скую букву ( Б).

Pread ('Б') = 'А' - функция возвращает букву А, пре­дыдущую по отношению к букве Б.

Succ ('Г') = 'Д' - функция возвращает букву Д, сле­дующую по отношению к букве Г.

Upcase ('n') = 'N' - функция возвращает заглавную букву N, преобразованную из строчной буквы n.

Например, написать программу, выводящую на экран символы с кодами от32 до 255.

Program Lab 1;

Uses Crt;

Var k: Byte;

Begin

ClrScr;

For k : = 32 To 255 Do

WriteLn (Chr (k),' ');

ReadLn;

End.

 

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

Строка - это последовательность символов кодовой таб­лицы ASCII. При использовании в выражениях строка за­ключается в апострофы. Количество символов в строке (дли­на строки) может динамически изменяться в пределах от 0 до 255. Для определения данных строкового типа используется идентификатор String, за которым следует заключенное в квадратные скобки значение максимально допустимой длины строки данного типа. Если это значение не указывается, то по умолчанию длина строки принимается равной 255 байтам.

Переменную строкового типа можно определить через описание типа в разделе определения типов или непосредст­венно в разделе описания переменных.

Туре <имя типа> = String [максимальная длина строки];

Var <идентификатор> : < имя типа >;

Переменную типа String можно задать и без описания типа:

Var <идентификатор> : String [максимальная длина строки];

Определение строкового типа устанавливает максималь­ное количество символов, которое может содержать строка. Строковые данные могут использоваться в программе также в качестве констант. Не допускается применение стро­ковых переменных в качестве селектора в операторе Case.

Например:

Const Address = 'ул. Переверткина, 25'; {Строковая константа}

Type Flot = String [125]; {Длина строки 125 символов}

Var Fstr : Flot; {Описание с заданием типа}

Stl: String ; {По умолчанию длина строки - 255}

St2 : String [50]; {Длина строки - 50}

Nazv : String [280]; {Ошибка, длина Nazv превышает 255}

Тип String похож на одномерный массив символов, но в отличие от массива символов, количество символов в строке может меняться от 0 до N. К любому символу в строке можно обратиться так же, как к элементу массива, т.е. указав рядом с именем переменной типа String, в квадратных скобках ин­декс символа в строке.

Например:

St [2] - 2-ой символ в строке St;

St [i] -i-ый символ в строке St.

В самом начале строки (под нулевым номером) распо­ложен байт, содержащий значение текущей длины строки. Поэтому для определения объема памяти в байтах, требуе­мой для размещения строки, к значению ее максимальной длины прибавляется 1. Например, для размещения в памяти переменных Fstr, St2 требуется соответственно 126 байтов и 51 байт.

Для строк применимы операции: операция объединения строк (конкатенация) и операция сравнения.

Операция объединения строк обозначается знаком плюс (но это не сложение).

Например:

Stl: ='abed';

St2: ='efk';

St:= Stl + St2;

Результат работы функции: St содержит 'abedefk'.

Если длина результирующей строки превысит допусти­мую длину (255), то «лишние» символы отбрасываются.

Перечислим операции сравнения: = ,> = ,>,<>,<, <=. Сравнивать можно строки разной длины. Сравнение осуще­ствляется слева направо в соответствии с ASCII кодами сим­волов. Считается, что отсутствующие символы в более ко­роткой строке имеют код, меньше кода любого действительного символа. Например, 'АВ' больше, чем 'А'.

Тип данных String используется при обработке текстов, а это означает, что необходимо уметь:

-копировать часть строки;

-удалять часть строки;

-вставлять подстроку (т. е. часть строки) в данную строку;

-осуществлять поиск подстроки (т. е. часть строки) в данной строке.

Для реализации этих операций в Турбо-Паскале сущест­вуют стандартные процедуры и функции:

Функции и процедуры Назначение
Length (Z: String): Integer Возвращает текущую длину строки Z
Concat (Zi, [Z2,..., Z„] : String) : String; Возвращает слияние (конкатенацию) строк ZbZ2,...,Zn.
Copy (Z: String; Index: Integer; Count: Integer): String; Возвращает подстроку строки Z длиной Count, начинающуюся с позиции Index.
Pos (Substr: String; Z: String): Byte; Определяет первое вхождение подстро­ки Z в строку Substr и возвращает 0, если Z не содержит Substr или номер первого символа Substr в Z.
Insert (Source: String; Var Z : String;Index: Integer); Вставляет в строку Z подстроку Source, начиная с позиции Index .
Delete (Var Z: String; Index: Integer; Count: Integer); Удаляет из строки Z подстроку длиной Count, начинающуюся с позиции Index.
Str (N : [:Width[:Decimals]]; Var Z: String); Преобразует числовое значение N в строковое Z. Возможно задание формата jpN.
Val (Z; Var N; Var Code: Integ­er); Преобразует строковое значение Z (строку цифр) в значение числовой пе­ременной N.

 

Рассмотрим работу функций на конкретных примерах. Используются две процедуры, которые корректно удаляют и вставляют символы в строку. При удалении символов ос­тавшаяся часть строки подтягивается к началу, чтобы занять образовавшуюся после удаления «дырку». При вставке, на­оборот, строка раздвигается, чтобы вместить вставляемые символы.

Например, надо удалить из строки St пять символов, начиная с 1-ой позиции:

St: = 'река Волга';

Delete (St, 1, 5);

Получим: St = 'Волга'.

Пусть необходимо удалить все пробелы из начала строки st (пробелы в на­чале строки называются ведущими пробелами):

While st [1] = ‘ ‘ Do Delete (st, 1,1);

Аналогичный фрагмент можно написать для удаления пробелов из конца строки (завершающих пробелов):

While St [Length (St)] = ‘ ‘ do Delete (St, Length (St), 1);

Например, вставим подстроку S2 в строку S1, начиная с 16-ой по­зиции.

S1 : ='Я разрабатываю программы '; S2 : = 'хорошие';

Insert (S2, SI, 16);

В результате получим: S1 =' Я разрабатываю хорошие программы'.

При вставке в начало и конец строки действие процеду­ры Insert аналогично выполнению операции конкатенации. Так, в примере со вставкой звездочек в конец строки можно заменить s : = s + ' * ' на Insert (' * ', s, length (s) +1).

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

Например, определим длину строки 123456789.

n : = Length ('123456789');

Результат работы функции n = 9.

Например, выделим из строки S1 пять символов, начиная с 1-ой позиции.

S1: =' Turbo Pascal';

S2: = Copy (S1, 1,5);

S3: = Copy (S1, 7, 3);

В результате получим S2 =' Turbo ', S3 =' Pas '.

Например, объединить три строки символов в строке s.

s: = Concat ('АА', 'XX', 'Y');

В результате s ='AAXXY'.

Функция Concat выполняет те же действия, что и опера­ция конкатенации. Например, для приведенного случая то же самое можно было записать так:

s : = 'АА' + 'XX' + 'Y';

Рассмотрим результат работы функции pos. Он имеет целочисленный тип и равен номеру той позиции, в которой находится 1-ый сим­вол подстроки. Если в строке подстроки не найдено, резуль­тат равен нулю.

S1 : = 'Turbo Pascal'; nl: = Pos ('Pascal', S1); n2 : = Pos ('паскаль', S1);

В результате nl = 7; n2 = 0 так как 'паскаль' и 'Turbo Pas­cal' - это разные строки.

Разработаем в качестве примера программу, проверяющую, является ли введенная совокупность симво­лов именем месяца.

 

Program lab;

Uses winCrt;

Const inst: Array [1 .. 12] of String [10] = ('январь', 'февраль', 'март',

'апрель', 'май', 'июнь', 'июль',

'август', 'сентябрь', 'октябрь',

'ноябрь','декабрь');

Var Str: String [10];

i: Integer;

Month: Boolean;

Begin

ClrScr;

WriteLn ('Введите имя месяца:');

ReadLn (Str);

For i:=1 To 12 Do

If Str=inst[i] Then Month:=True;

If Month=True Then

writeln ('Введено имя месяца')

Else WriteLn('Heт имени месяца');

End.

 

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

Program Lab2;

Uses WinCrt;

Const n = 30;

Var a: String [n];

p: String [7];

g, s, i,j,k: Integer;

BEGIN

ClrScr;

p:='aejiouy';

WriteLn ('Введите текст:');

k:=0;

Repeat

k:=k+1;

Read (a[k]);

Until (k=n) Or (a[k]='.');

WriteLn;

g:=0;

s:=0;

For i:=1 To k Do

For j:=1 To 7 Do

If a[i] = p[j] Then g:=g+1;

s:=k-g-1;

WriteLn ('Гласных =', g);

WriteLn ('Согласных = ', s);

End.



2015-12-06 858 Обсуждений (0)
Строковый тип данных String 0.00 из 5.00 0 оценок









Обсуждение в статье: Строковый тип данных String

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (858)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)