Процедуры и функции для работы со строками

Все основные действия над строками и символами реализуют с иомощью стандартных процедур и функции.

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; просмотров: 2159;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.