Процедуры и функции для работы со строками
Все основные действия над строками и символами реализуют с иомощью стандартных процедур и функции.
1. Функция Length(st):word- возвращает длину строки st, например:
n:=length(st1); {целочисленной переменной n присваивается значение длины строки}
2. Процедура Delete(st, index, count)-удаляет count символов строки st, начиная с символа с номером index, например:
Sl: = 'dddddsssssfffff';
Delete(Sl,6,5); {получим результат 'dddddfffff'}
3. Процедура Insert(St2,St1,index) - вставляет подстроку символов St2 в строку St1, начиная с символа с номером index. Процедура обычно используется при формировании строк, включающих числовую информацию, например:
S1:= 'dddddddddd';
S2:= 'aaaaaа';
Insert(S1, S2,6): {получим 'dddddaaaaaaddddd'}
Insert ('Рas', S2, 6); {получим 'dddddPasaaaaaaddddd'}
4. Процедура Str(x[:w [:d]], St) - преобразует результат выражения x, в строку st, содержащую запись этого числа в виде последовательности символов (как при выводе).
Процедура обычно используется для формирования строк, включающих числовую информацию.
5. Процедура Val(St, x. Code) -преобразует строку St с записью числа в виде последовательности символов во внутреннее представление целого или вещественного числа и помещает его в переменную х. В целочисленной переменной Code процедура возвращает код ошибки: 0 - если преобразование прошло успешно, и номер ошибочного символа, если строка st не являлас допустимой формой записи числа.
Процедура обычно используется, если необходимо предотвратить некорректный ввод чисел, например:
Var S: string; Code:integer; a:real;
... repeat
Write('Введите число а:');
Readln(S); {вводим строку}
VaI(S,a,Code); {пытаемся преобразовать строку в число}
If Code<>0 then Writeln('Число введено не верно');
until Code=0;... {до получения правильного значения числа)
6. Функция Copy(St,index,count):string- возвращает фрагмент строки St длиной count символов, начиная с символа с номером index, например:
Sl:= 'qqqEEppEEuuuuu';
S:= Copy(S1,4,6); {получим строку 'ЕЕЕЕEE'}
7. Функция Pos(St2,Stl): integer- возвращает номер позиции первого вхождения подстроки St2 в строку St1. Если вхождение не найдено, то функция возвращает 0, например:
S1 = 'qqqEEppEEuuuuu';
i:= Pos(S1, 'ЕЕ'); {получим i=4}
8. Функция UpCase(ch):char - возвращает символ, соответствующий символу верхнего регистра для ch, если таковой имеется, либо сам символ ch, если для него не определен символ верхнего регистра.
Пример: Дана строка не более 40 символов, состоящая из слов, разделенных пробелами, и завершающаяся точкой. Разработать программу удаления «лишних» пробелов. Лишними считать пробелы в начале строки до первого символа, второй и более пробелы между словами и пробелы в конце строки.
При решении данной задачи с использованием строкового гапа отпадает необходимость посимвольного анализа строки. Функция Pos, которой в качестве подстроки заданы два пробела подряд, позволит определить все места в строке, где записаны несколько пробелов подряд. Поочередно удалив лишние пробелы, получим строку, в которой останется только проверить и при необходимости удалить пробел в начале и пробел в конце. Ниже приведен текст программы.
Var st:string[40];
k:byte;
Begin
WriteLn('Введите строку длиной <= 40 символов');
ReadLn(st);
Write('Введенная строка:');
Writeln(st);
k:=pos(' ',st); {проверяем, есть ли сдвоенные пробелы?}
white k<>0 do {пока есть сдвоенные пробелы}
begin
detete(st,k,l); {удаляем первый пробел}
k:=pos(' ',st); {проверяем, есть ли cдвоенные пробелы?}
end;
if st[1]= ' ' then delete(st, 1, 1); {удалили пробел в начале}
k:= length(st);
if st[k]=' ' then delete(st, k, 1); {удалили пробел в конце}
WriteLn('Результат:');
if length(st)<>0 then WriteLn(st) else WriteLn('Строка содержала только пробелы.');
end.
Пример. Разработать программу которая вводит строки, содержащие фамилию, имя. отчество и год рождения, а выводит - строки, содержащие фамилию, инициалы и возраст на текущий год. Например;
Иванов Иван Иванович 1956 - Иванов И.И. 45
Завершение ввода при чтении пустой строки.
Для выполнения операций над строками используем строковые функции. Обработку строк будем выполнять в цикле до ввода пустой строки. Начнем с определения местоположения первого пробела, который отделяет имя от фамилии. Для этого используем функцию Pos, а результат запишем в переменную cl. Затем перепишем в строку результата фамилию, пробел и первый инициал. Туда же дописываем точку.
Для поиска следующего пробела придется копировать в рабочую строку часть исходной строки, начиная с символа после первой буквы имени. В этой строке вновь определяем местоположение пробела и заносим результат в переменную с2. Теперь можно переписать в строку-результат второй инициал.
Удаляем из рабочей строки начало, включая второй инициал, и вновь определяем местоположение пробела, выделяя подстроку, содержащую год рождения. Удаляем из рабочей строки остаток отчества и преобразуем строку в число. Полученное значение вычитаем из текущею номера года, а результат вновь преобразуем в строку и дописываем к строке результат. Выводим результат на экран и вводим следующую строку.
Var St,strez,strab:string[40];
cl,c2,c3,n,old,code:word;
Begin
WrileLn('Введите строку. Завершение - ввод пустой строки.');
ReadLn(st);
While st<>''do {цикл ввода, преобразования и вывода строк}
begin
cl:=Pos(' '.st);{определим местоположение первого пробела}
strez:=Copy(st, 1, cl+1)+ '.'; {перепишем фамилию, инициал и добавим
точку}
strab:= Copy(st, c1+2,Length(st)-c1-1); {копируем остаток строки
в рабочее поле}
c2:=Pos(' ', strab); {определяем местоположение второго пробела}
strez:=strez+strab[c2+1]+'.'; {добавляем к результату второй инициал
и точку}
Delete (strab,l,с2+1); {удаляем распознанную часть}
c3:=Роs(' ',strab); {определяем местоположение третьего пробела}
Delete(strab,l,c3); {удаляем остаток имени}
Val(strab,n,code); {преобразуем год рождения в число}
old:=2001-n; {определяем возраст)
Str(old,strab); {преобразуем возраст в строку}
strez:=strez +' ' + strab; {добавляем возраст в результат}
WriteLn(strez); {выводим результат}
WriteLn('Введите строку. Завершение - ввод пустой строки.');
ReadLn(st);
End;
End.
Дата добавления: 2015-12-01; просмотров: 2131;