русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Редактирование строк


Дата добавления: 2015-06-12; просмотров: 899; Нарушение авторских прав


Функция Length(S : String) возвращает текущую длину строки S. Вообще говоря, можно вместо нее пользоваться конструкцией Ord( S[0] ), что то же самое.

Функция Concat производит слияние переданных в нее строк. Вместо нее всегда можно пользоваться операцией «+»:

S3 := Concat( S1,S2 ); { то же, что S3 := S1 + S2 }

S3 := Concat( S3,S1,S2 ); { то же, что S3 := S3 + S1 + S2 }

Если сумма длин строк в Concat превысит максимальную длину строки в левой части присваивания, то излишек будет отсечен.

8.3.1.3. Функция Сору(S : String; Start, Len : Integer) позволяет выделить из строки последовательность из Len символов, начиная с символа Start. Если Start больше длины всей строки S, то функция вернет пустую строку, а если Len больше, чем число символов от Start до конца строки S, то вернется остаток строки S от Start до конца. Например:

SCopy = Сору( 'АВС***123', 4, 3 ) { SСору='***' }

SCopy = Copy( 'ABC', 4, 3 ) { SCopy=' '}

SCopy = Copy( 'ABC***123', 4,11 ) { SCopy='***123' } {154}

Используя процедуру Copy, построим игровой пример появления строки на экране (рис. 8.4).

USES CRT; { используется модуль CRT } { Процедура выводит строку S в позиции (X,Y), } { с эффектом раздвижения и звуковым сигналом. } PROCEDURE ExplodeString(X,Y: Byte; S: String; С: Word ); VAR i,L2 : Byte; BEGIN L2 := (Length(S) div 2 ) + 1; { середина строки } if X < L2 then X:=L2; { настройка X } for i:=0 to L2-1 do begin { цикл вывода: } GotoXY( X-i, Y ); { начало строки } { Вывод расширяющейся центральной части строки: } Write( Copy( S, L2-i, 2*i+1 )); Sound(i*50); { подача звука } Delay(С); { задержка С мс } NoSound { отмена звука } end { конец цикла } END; { ========= ПРИМЕР ИСПОЛЬЗОВАНИЯ ПРОЦЕДУРЫ ======== } BEGIN ClrScr; { очистка экрана } ExplodeString( 40, 12, '12345678900987654321', 30); ReadLn { пауза до нажатия клавиши ввода } END.

Рис. 8.4



8.3.1.4. Процедура Delete( VAR S : Siring; Start, Len : Integer ) видоизменяет сроку S, стирая Len символов, начиная с символа с номером Start:

S := 'СТРОКА';

Delete( S, 2, 4); { S='CA' )

После стирания подстроки ее оставшиеся части как бы склеиваются.

Если Start=0 или превышает длину строки S, то строка не изменится. Также не изменит строку значение Len=0. При Len, большем чем остаток строки, будет удалена подстрока от Start и до конца S. Это можно использовать при «подрезании» строк до заданной величины: {155}

Delete( S, 16, 255)

Здесь строки S длиною менее 17 символов пройдут через процедуру неизменными, а все остальные будут укорочены до длины в 16 символов.

8.3.1.5. Процедура Insert( Subs : String; VAR S : String; Start: Integer) выполняет работу, противоположную той, что делает Delete. Insert вставляет подстроку Subs в строку S, начиная с позиции Start:

S: = 'Начало-конец';

Insert( 'середина-', S, 8 );

{ теперь S = 'Начало-середина-конец' }

Если измененная строка S оказывается слишком длинной, то она автоматически укорачивается до объявленной длины S (при этом, как всегда, «теряется» правый конец).

Пример использования пары процедур Insert и Delete можно увидеть на рис, 8.5, где приводится функция создания строки с текстом посередине.

{Функция возвращает строку длиной Len, заполненную символом Ch, со вставленной в середину подстрокой S } FUNCTION CenterStr( S: String; Len: Byte; Ch: Char ) : String; VAR fs : String; { промежуточная строка-буфер } ls, l2 : Byte; { вспомогательные переменные } BEGIN FillChar(fs[1], Len, Ch); { заполнение строки fs Ch } fs[0] := Chr( Len ); { восстановление длины fs } ls := Length( S ); { длина входной подстроки S } if ls>=Len then begin { если некорректны параметры} CenterStr:=S; Exit { то ничего с S не делается } end; l2 := ( Len-ls } div 2 +1;{место начала вставки в fs } Delete( fs, l2, ls ); {очистка места в центре fs } Insert( S, fs, l2 ); {и вставка туда строки S } CenterStr := fs {итоговое значение функции } END; {=== ПРИМЕР ВЫЗОВА ФУНКЦИИ ===} BEGIN WriteLn(CenterStr( 'Работает!', 80, '=')); ReadLn { пауза до нажатия клавиши ввода } END.

Рис. 8.5 {156}

8.3.1.6. Функции Pos(Subs, S : String) : Byte возвращает номер символа в строке S, с которого начинается включение в S подстроки Subs. Если же S не содержит в себе Subs, то функция вернет 0. Пример использования функции дан на рис. 8.6, где построена модификация процедуры преобразования Str.

{ Процедура преобразования числа X в строку S} { Вход : X — числовое значение; } { F — полная длина поля числа; } { N — число цифр после запятой. } { Выход: строка S, в которой предшествующие } { числу пробелы заменены на 0. } PROCEDURE ZStr( X : Real; F,N : Byte; VAR S : String ); VAR p : Byte; BEGIN Str( X:F:N, S ); { строка с пробелами } { Цикл замены пробелов на нули : } while Pos(' ', S) > 0 do S[Pos(' ', S)] := '0'; p := Pos('-',S); { позиция минуса в числе } if р <> 0 then begin { Если минус имеется, то } S[p] := '0'; S[1] := '-' { переместить его в нача-} end; { ло строки S. } END; { ======= ПРИМЕРЫ ВЫЗОВОВ ФУНКЦИИ ======= } CONST r : Real = 123.456; b : Byte = 15; i : Integer = -3200; St : String = ' '; BEGIN ZStr( r, 10, 5, St ); WriteLn( St ); { 0123.4560 } ZStr{ b, 10, 1, St ); WriteLn( St ); { 0000015.0 } ZStr( i, 10, 0, St ); WriteLn( St ); { -00003200 } ReadLn { пауза до нажатия клавиши ввода } END.

Рис. 8.6

Очевидным недостатком функции Pos является то, что она возвращает ближайшую стартовую позицию Subs в S от начала строки, т.е. вызов

P := Pos( 'noo', 'Boonoonoonoos');

завершит свою работу, вернув значение 4, хотя есть еще и 7, и 10. {157}

На рис. 8.7 приведен вариант функции, использующей функцию Pos и возвращающей позицию любого вхождения Subs в S, если оно существует.

{Функция возвращает номер символа, с которого начинается N-e вхождение подстроки Subs в строку S. Одновременно возвращается общее число вхождений Count. При неудаче поиска функция возвращает значение 0. } FUNCTION PosN( Subs, S : String; N : Byte; VAR Count : Byte ) : Byte; VAR p, PN : Byte; { вспомогательные переменные } BEGIN Count:=0; PN:=0; repeat { Цикл по вхождениям : } p := Pos( Subs, S ); { поиск вхождения } if Count<N then Inc(PN,p);{ суммирование позиций } Inc( Count ); { счетчик вхождений } Delete( S, 1, p ) { уменьшение строки } until p=0; { конец цикла, если р=0 } Dec( Count ); { надо уменьшить Count } if N<=Count { N не больше, чем Count? } then PosN := PN {Да, возвращаем позицию } else PosN := 0; { Нет, возвращаем 0 } END; VAR { ===== ПРИМЕР ВЫЗОВА ФУНКЦИИ ===== } C : Byte; {количество вхождений подстроки в строку } BEGIN WriteLn('3-я позиция noo в Boonoonoonoos начинается', ' с символа ', PosN('noo','Boonoonoonoos',3,С):3); WriteLn( 'Всего найдено вхождений : ', С ); ReadLn { пауза до нажатия клавиши ввода } END.

Рис. 8.7



<== предыдущая лекция | следующая лекция ==>
Операции над строками | Преобразование строк


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.189 сек.