Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

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.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.