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.