Работа со строковыми переменными

 

1.Описание строковых переменных.

 

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

С текстовыми (они же символьные или строковые) данными мы уже встречались на одном из первых занятий, так что для начала вспомним то, что нам уже известно.

Описание строковой переменной помещается в блок описания переменных (после слова Var) и выглядит так:

Var

<имя_переменной>: String [<количество_символов_N>]

1<=N<=255

колличество символов N может отсутствовать, тогда считается, что задается max колличество символов =255 символам, т.е.

<имя_переменной>: String

 

В квадратных скобках должно стоять либо целое число, либо имя целочисленной константы (объявленной в блоке const), либо составленное из них целочисленное выражение. Например, такое описание

Var name: String[50];

 

отводит в памяти компьютера 50+1 байт для размещения переменной с именем name. При этом нужно иметь ввиду, что в квадратных скобках записывается наибольшее возможное для этой переменной количество символов, то есть объем оперативной памяти компьютера, необходимый для хранения значений этой переменной во время исполнения всей программы. Если в какой-то момент этой переменной будет присвоено более "короткое" значение, то часть памяти компьютера просто не будет использоваться, а если более "длинное", то часть символов пропадет.

Нулевой символ строки содержит информацию о текущей длине строки, его код равен числу символов в строке.

Можно объявить строковую константу в разделе описания констант:

const

<имя_переменной>:String='значение'

Пр. const

st='группа';

 

2. Ввод и вывод символьных переменных.

Работа с символьными переменными.

 

Ввод и вывод символьных переменных осуществляется с помощью команд Read (ReadLn) и Write(Writeln) соответственно. При этом введется и напечатается столько символов, сколько указано в описании (недостающие дополнятся пробелами, лишние "отрежутся").

Присваивание значения такой переменной осуществляет обычный оператор присваивания (:=), при этом текстовую константу следует заключить между двумя знаками ', например, выполнение оператора

 

name:= 'все, что угодно'

 

приведет к тому, что в 50-символьную переменную text будет занесена строка, содержащая 15 символов:

 

все, что угодно

 

Остальные 35 байт использоваться не будут. При выполнении оператора

 

name:='все, что угодно, и еще много разного нужного и не очень'

 

в переменную name будет занесена строка

 

все, что угодно, и еще много разного нужного и не

 

Остальная часть (очень) введена не будет.

 

Для работы с отдельным символом из строки можно указывать имя строки и номер нужного символа в квадратных скобках.

Так name[1] указывает на первый символ строки name.

Пример: var speech:string[20];

...

speech:='Маузер';

speech[4]:='ч';

speech[1]:='В';

Writeln(speech);

...

На экране: Ваучер

 

 

3. Группы символов кодовой таблицы ASCII.

 

Константа типа Char - это непустой символ из кодовой таблицы ПК, заключенный в апострофах: 'D', '*' и т.д.

Cимволы можно задавать и с помощью кодового номера с префиксом #, например: #7 - звуковой сигнал, #254 - символ ю, и т.д. Для неклавишных символов это - один из основных способов задания.

Символы с кодами 0-31 являются управляющими, это означает, что вывод их на экран или в файл эквивалентен подаче команды, управляющей работой устройства.

Гpуппы символов кодовой таблицы ПК (альтернативной):

0..127 - стандартные символы ASCII

0...31 - управляющие символы

(управляют работой компьютера);

32 - пробел

33..47, 58..64, 91..96 - математические и другие знаки;

48-57 - цифры

65 - A.. 90 - Z -прописные латинские буквы

97 - a.. 122 - z - строчные латинские буквы

128-А..159-Я - прописные русские буквы

160-а..175-п, 224-р..239-я - строчные русские буквы

176..178 - символы заполнения фона

179..222 - символы псевдографики

 

Символы, используемые при оформлении программ:

░ -176 ▒ -177 ▓ -178 □ -219

Символы, используемые для построения таблиц и рамок:

 

194 196 203 205

218 ┌ ┬ ─ ┐ 191 201 ╔ ╦ ═ ╗ 187

 

195 ├ ┼ 197 ┤ 180 204 ╠ ╬ 206 ╣ 185

 

179 │ │ 179 186 ║ ║ 186

 

192 └ ┴ ─ ┘ 217 200 ╚ ╩ ═ ╝ 188

193 196 202 205

 

 

4. Стандартные функции обработки символьных величин:

 

Chr(k:byte):char - получение символа по его коду;

Ord(c:char):byte - получение кода заданного символа;

UpCase(c:char):char - перевод строчных латинских символов

'a'..'z' в прописные 'A'..'Z'; остальные символы не

изменяются;

Pred(c:char):char - получение символа, предшествующего

заданному; (но нет Pred(#0));

Succ(c:char):char - получение символа, следующего за

заданным; (но нет Succ(#255));

 

Операции над символами:

- присваивание; три способа присвоить значение символьной

переменной: с:='A'; c:=#65; c:=Chr(65);

- сравнение (по коду): 'R'='R' 'Q'<'R' 'R'<'r'

 

Символьные строки, как и числа, можно сравнивать между собой и использовать эти равенства и неравенства в качестве условий в циклах и развилках.

Равными считаются строки одинаковой длины (не по описанию,а фактически), у которых все символы, стоящие на соответствующих местах, одинаковы. Например, строки text_1 и text_2 равны, если

 

text_1 = 'Я вас любил!', text_2 = 'Я вас любил!'.

 

В следующих случаях строки text_1 и text_2 не равны:

 

text_1 = 'Я вас любил!', text_2 = 'Я Вас любил!';

text_1 = 'Я вас любил!', text_2 = ' Я вас любил!';

text_1 = 'Я вас любил!', text_2 = 'Я вас любил...'.

 

(Попробуйте определить, почему эти строки не равны).

 

Более того, можно использовать при сравнении строк знаки >(больше) и < (меньше). Одна строка считается больше другой, если в словаре (где слова расположены по алфавиту) она стоит дальше от начала. Если первые буквы строк совпадают, то сравниваются вторые, затем третьи и т.д. Строчные буквы расположены в таком воображаемом "словаре" после заглавных, а русские после латинских.

Что касается цифр и прочих символов, которые могут входить в строки, можно руководствоваться общим правилом. Каждый символ, который можно набрать на клавиатуре, имеет свой код, эти коды можно посмотреть в специальной таблице,

На компьютерах IBM PC принят код, называемый ASCII.

 

Символьные строки можно "склеивать" между собой с помощью операции "+" (ее принято называть операцией конкатенации (объединение)).

Например, выполнение группы операторов

a1:= 'ма'; a2:= 'шина';

b:= a1 + a2;

приведет к тому, что переменной b будет присвоено значение 'машина'.

 

 

5. Встроенные функции для обработки строк

 

Length(Str) - функция, котоpая вычисляет текущую длину (в символах) стpоки Str. Pезультат имеет целочисленный тип. Текущая длина стpоки содеpжится также в коде символа Str[0].

Copy(St,K,J) - функция,котоpая выделяет из St подстpоку из J символов, начиная с позиции K. Если K>Length(St), то pезультатом будет пустая строка.

Pos(S,St) - функция, котоpая опpеделяет наименьший номеp элемента в St, начиная с котоpого S входит в St как подстpока. Если в St не найдено S, то pезультат pавен нулю. Pезультат имеет тип byte.

Concat(str1,str2,..) - функция, выполняющая объединение всех строк, указанных в качестве аргументов. Количество аргументов может быть любым.

 

 

6. Встроенные процедуры для обработки строк

 

Delete(Str,K,J) - пpоцедуpа, котоpая удаляет из стpоки Str J символов, начиная с K-го. Pезультатом является стpока Str без удаленной подстpоки. Если K больше размера строки, символы не удаляются.

Insert(Str1,Str2,K) - пpоцедуpа, котоpая вставляет стpоку Str1 в стpоку Str2, начиная с позиции K. Если полученная в pезультате стpока Str2 пpевышает 255 символов, то все лишние символы (начиная с 256) отбpасываются.

Str(x,st) - процедура, которая преобразует число X вещественного или целого типа в последовательность символов. Число X может быть указано с форматом, аналогичным формату вывода в процедуре Write, например: Str(x:8:3,st).

Val(st,x,Code) - процедура, которая преобразует символьное представление числа в числовое значение, соответствующее типу переменной x (вещественному или целому). Переменная Code:integer служит для контроля правильности выполнения преобразования (Code=0) или ука зания номера ошибочного символа (Code<>0).

Пр1.

Дана строка. Подсчитать общее число символов +,-,* в данной строке.

 

Program St1;

const n=10;

var s:string[n];

I,m: integer;

begin

writeln ('введите строку символов, не более 10');

readln(s);

m:=0; {счетчик колличества символов +, -, *}

for i:=1 to length(s) do

if (s[i]='+') or(s[i]='-') or (s[i]='*') then m:=m+1;

write ('m=', m);

end.

 

Пр 2

Дана строка из 20 символов. Удалить в ней все пробелы и выделить подстроку, которая в ней содержиться после первого символа ';'.

Program St2;

var stroka:string[20];

I: integer;

begin

writeln ('введите строку символов, не более 20');

readln(stroka);

i:=1;

while (i>0) do

begin

i:=pos('',stroka);{Поиск подстроки ' ' в stroka, результат число, т.е. определяется номер элемента, начиная с которого ' ' входит в stroka}

if i>0 then delete(stroka,i,1) {удаляет один элемент, стоящий наi-ом месте}

end;

i:=pos(';',stroka); {поиск ':' в строке }

if i>0 then writeln ('подстрока после; будет такая:', copy(stroka,i+1,length(stroka)-i)) {выделяетизстрокиlength(stroka)-i) -элементов,начиная с i+1}

else writeln ('такой подстроки нет');

end.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: