Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Процедуры и функции для работы со строками
Все основные действия над строками и символами реализуют с иомощью стандартных процедур и функции. 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.
|