рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Открытые строки

Открытые строки - раздел Транспорт, От автора   Открытыми Строками, Или Длинными Стро...

 

Открытыми строками, или длинными строками, или C-строками, называются символьные последовательности длиной до 65535 символов, ограниченные справа нуль-символом #0. Именно таким образом организован строковый тип в языке C, отсюда и одно из названий этой структуры данных. Тип String в Паскале очень удобен и прост в использовании, но не допускает значений длиной более 255 символов, открытые строки позволяют преодолеть это ограничение. Средства для обработки открытых строк содержатся в модуле Strings. Открытую строку в программе можно описать или как Array[0..L] Of Char, и тогда она будет храниться в сегменте данных, или как ^Char для хранения в хипе (второй вариант предпочтительнее). Тип ^Char имеет в Паскале стандартное имя PChar. Модуль Strings включает следующие подпрограммы:

1. Function StrNew(Str: PChar): PChar; - размещает в хипе копию строки Str и возвращает указатель на нее.

2. Function StrDispose(Str: PChar); - освобождает место в хипе, отведенное под строку Str .

3. Function StrLen(Str: PChar): Word; - возвращает количество символов в строке Str (не считая нуль-символа).

4. Function StrEnd(Str: PChar): Pchar; - возвращает указатель на нуль-символ, ограничивающий строку Str .

5. Function StrMove(Dest, Source: PChar; Count: Word): PChar; - копирует ровно Count символов из Source в Dest и возвращает Dest, не записывает #0, если он не входит в Count символов.

6. Function StrCopy(Dest, Source: PChar): PChar; - копирует строку Source в Dest, возвращает Dest .

7. Function StrLCopy(Dest, Source: PChar; MaxLen: Word): PChar; - копирует не более MaxLen символов строки Source в строку Dest, возвращает Dest .

8.Function StrECopy(Dest, Source: Pchar): PChar; - копирует строку Source в строку Dest и возвращает указатель на конец Dest .

9. Function StrPCopy(Dest: PChar; Source: String): PChar; - конвертирует Паскаль-строку Source в открытую строку Dest и возвращает Dest .

10. Function StrPas(Str: PChar):String; - конвертирует открытую строку в Паскаль-строку.

11. Function StrComp(Str1, Str2: PChar): Integer; - возвращает результат сравнения двух строк: отрицательное число, если Str1<Str2, положительное число, если Str1>Str2, и ноль, если строки равны.

12. Function StrIComp(Str1, Str2:PChar): Integer; - возвращает результат сравнения двух строк, игнорируя регистр, то есть большая и маленькая латинские буквы считаются равными.

13. Function StrLComp(Str1, Str2: PChar; MaxLen: Word): Integer; - возвращает результат сравнения двух строк, учитывая не более MaxLen символов.

14. Function StrLIComp(Str1, Str2: PChar;MaxLen: Word): Integer; - возвращает результат сравнения двух строк, учитывая не более MaxLen символов и игнорируя регистр.

15. Function StrLower(Str: PChar):PChar; - переводит символы строки Str в нижний регистр и возвращает Str .

16. Function StrUpper(Str: PChar):PChar; - переводит символы строки Str в верхний регистр и возвращает Str .

17. Function StrCat(Dest, Source: PChar): PChar; - дописывает строку Source в конец строки Dest и возвращает Dest.

18. Function StrLCat(Dest, Source: PChar; MaxLen: Word): Pchar;-дописывает не более MaxLen-StrLen(Dest) символов строки Source в конец строки Dest и возвращает Dest.

19. Function StrPos(Str1, Str2: PChar): PChar; - возвращает указатель на первое вхождение строки Str2 в строку Str1 или Nil .

20. Function StrScan(Str: PChar; Chr: Char): PChar; - возвращает указатель на первое вхождение символа Chr в строку Str или Nil .

21. Function StrRScan(Str: PChar; Chr: Char): PChar; - возвращает указатель на последнее вхождение символа Chr в строку Str или Nil .

Все эти подпрограммы являются функциями, но их можно вызывать и как процедуры, так как большинство из них возвращает результат своей работы и через указатель функции, и через список параметров. Паскаль допускает такой вызов функций (не только из модуля Strings, но и любых других стандартных и пользовательских функций), если программа откомпилирована в режиме расширенного синтаксиса. Режим расширенного синтаксиса включается опцией компилятора {$X+}. Например, в любой программе очень удобно использовать для ожидания нажатия клавиши функцию ReadKey, но это не процедура, поэтому в программе, откомпилированной в режиме {$X-}, нельзя просто записать оператор ReadKey; - это будет синтаксической ошибкой. Придется описать переменную типа Char и вызвать ReadKey как функцию: переменная:= ReadKey;, хотя код нажатой клавиши нам и не нужен.

Открытую строку, описанную как массив, можно вводить процедурой Read[Ln] и выводить процедурой Write[Ln], а строку, описанную как PChar, можно только выводить.

Решим, пользуясь открытыми строками, такую задачу: в текстовом файле записан некоторый русский текст. Упорядочить слова текста в алфавитном порядке и записать их в другой текстовый файл.

 

Uses Strings;

Const

Source_File_Name ='text.txt';

Target_File_Name ='words.txt';

Letters = ['а'..'п','р'..'я','А'..'Я'];

Type

P_Stack = ^T_Stack;

{будем хранить слова текста в списке, элементами которого будут открытые строки}

T_Stack = Record

p: PChar;

Next: P_Stack;

End;

Var

f : Text;

ch : Char;

Top,p,pp : P_Stack;

Bufer : Array[0..100] Of Char;

{открытая строка для чтения слова из файла, надеемся, что слов длиной более 100 букв не встретится}

pc : PChar;

n : Word;

 

Begin

Assign(f,Source_File_Name);

{$I-}

Reset(f);

If IOResult<>0 Then Begin

WriteLn('Не найден файл ',Source_File_Name);

Halt(1);

End;

{$I+}

Top:=Nil;

While Not Eof(f) Do Begin

Read(f,ch);

If ch In Letters Then Begin

{прочли русскую букву, собираем слово в Bufer}

n:=0;

While (ch In Letters)And Not Eof(f) Do Begin

Bufer[n]:=ch;

Inc(n);

Read(f,ch);

End;

Bufer[n]:=#0;

{слово собрано, проверим, достаточно ли места в хипе, чтобы поместить туда слово и два указателя}

If MaxAvail<=StrLen(Bufer) +SizeOf(PChar)

+SizeOf(P_Stack) Then Begin

WriteLn('Не хватает места в хипе');

Halt(2);

End;

{создаем новый элемент списка}

New(p);

p^.p:=StrNew(Bufer);

p^.Next:=Top;

Top:=p;

End;

End;

{файл прочитан}

Close(f);

{проверим, были ли в файле русские слова}

If Top=Nil Then Begin

WriteLn('Текст пуст');

Halt(3);

End;

{упорядочим слова в алфавитном порядке}

p:=Top;

While p^.Next<>Nil Do Begin

pp:=p^.Next;

While pp<>Nil Do Begin

If StrComp(p^.p,pp^.p)>0 Then Begin

pc:=p^.p;

p^.p:=pp^.p;

pp^.p:=pc;

End;

pp:=pp^.Next;

End;

p:=p^.Next;

End;

{запишем упорядоченные слова в текстовый файл, будем записывать не более 72 символов в каждую строку файла, разделяя слова одним пробелом}

Assign(f,Target_File_Name);

Rewrite(f);

p:=Top;

n:=0;

While p<>Nil Do Begin

If n+StrLen(p^.p)>72 Then Begin

WriteLn(f);

n:=0;

End;

Write(f,p^.p,' ');

Inc(n,StrLen(p^.p)+1);

p:=p^.Next;

End;

Close(f);

WriteLn('слова текста записаны в файл ',Target_File_Name);

End.

– Конец работы –

Эта тема принадлежит разделу:

От автора

B r... Теперь мы можем присвоить переменным их значения...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Открытые строки

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

От автора
Первое издание этой книги вышло в свет в 1997 году и довольно быстро стало библиографической редкостью. Автор несколько неожиданно для себя обнаружил, что книга пользуется черезвычайно высоким спро

Round(x) - округленное до целого вещественное число, преобразованное к типуLongInt
6. Sqr(x) - квадрат числа 7. Sqrt(x) - квадратный корень 8. Exp(x) - экспонента 9. Ln

Символьный тип данных
Для хранения символьной информации в Паскале предусмотрен специальный тип данных Char. Допустимы переменные, нетипизированные и типизированные константы такого типа. Данные типа

Caseвыражение Of
список значений : оператор/блок .................................. список значений: оператор/блок

Процедуры и функции. Сфера действия описаний
В языке Паскаль (как вы уже поняли из предыдущего материала) существуют понятия процедуры и функции. Процедуры и функции можно определить как замкнут

Открытые массивы и нетипизированные параметры
Из предыдущего раздела мы узнали, что параметры подпрограмм описываются как [Var] имя : имя типа , это правда, но не вся правда - существует еще два

Множества
Понятие множества в Паскале очень близко к математическому определению: множество - это совокупность однотипных неиндексированных объектов. Множества

Графические средства языка Паскаль
Монитор персонального компьютера может работать в двух режимах - текстовом и графическом. Все, что мы делали до сих пор, мы делали в текстовом режиме. Текстовый экран содержит 2000 знако

Особенности вещественных вычислений
В отличие от целочисленных выражений, которые всегда вычисляются точно, вещественные выражения дают приближенный результат и вещественные переменные содержат приближенные значения. Это обстоятельст

Case тип Of
константа 1 : (описание поля); константа 2 : (описание поля); .....................

Модуль Crt
Crt - еще один стандартный модуль Паскаля, в котором содержатся разнообразные средства консольного ввода-вывода (то есть ввода с клавиатуры и вывода на текстовый экран). Процедуры

Var TextAttr : Byte
В ней содержится текущий цвет фона и цвет символов, используемые при выводе на экран процедурами Write иWriteLn. Изменив эту переменную, вы задаете новый

Другие средства обработки файлов и модуль DOS
Для того чтобы определить, есть ли на диске файл с заданным именем, удобно использовать уже известную нам стандартную функцию IOResult , которая возвращает ноль при успешном завершении последней оп

Type SearchRec=Record
Fill : Array[1..21] of Byte; Attr : Byte; Time : LongInt; Size : LongInt; Name : Stri

Процедурные типы
Язык Паскаль позволяет использовать в программе данные типа “процедура” или типа “функция”. Такие данные можно передавать как аргументы подпрограмм, можно описывать и использовать массивы процедур

Указатели и динамическая память
Указателями называются переменные и константы, значениями которых являются адреса. Различаются два вида указателей - обобщенные указатели и

Динамические структуры: списки, деревья
Примеры программ, использующих динамические массивы, приведенные в предыдущей главе, все еще были плохими. Для того чтобы использовать динамические массивы таким образом, мы должны заранее знать ра

Использование командной строки и вызов внешних программ
Паскаль позволяет передавать информацию в программу при ее запуске через командную строку. Для этого служат две стандартные функции -ParamCount и ParamStr.

Обработка программных прерываний
Программное прерывание - это ситуация, возникающая, когда дальнейшее выполнение программы невозможно. Например, деление на ноль, переполнение, ошибка Range check error, обращение по неверному адрес

Объекты
Объектом в языке Паскаль называется совокупность данных и подпрограмм, обрабатывающих эти данные. Программирование с использованием объектов называется объектно-о

Type имя типа=Object
описание полей описание методов End; Поля объектов описываются так же, как поля записей, а описание метода - это заголовок процедуры или функции. Сами методы распол

Рекурсия и динамическое программирование
В этом и всех последующих разделах речь пойдет уже не о языке программирования Паскаль, а о задачах, которые вы можете решать с помощью этого языка, о наиболее интересных и полезных алгоритмах и пр

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

Стеки и очереди
Значение стека как структуры данных в программировании не исчерпывается лишь стеком отложенных заданий. В этом разделе мы решим с помощью стека задачу о вычислении значения арифметического выражени

Комбинаторные алгоритмы
В этом разделе мы рассмотрим три наиболее важные задачи комбинаторики: нахождение всех подмножеств множества из n элементов; нахождение всех выборок по m элементов из n элементов и нахождение всех

Бинарные деревья
В этом разделе мы рассмотрим различные алгоритмы обхода бинарного дерева. К алгоритмам создания бинарного дерева мы обратимся несколько позже, а пока будем считать, что дере

Упорядоченные бинарные деревья и приоритетные очереди
Упорядоченным бинарным деревом, или бинарным деревом поиска, называют дерево, в любой части которого элементы левого поддерева меньше корневого элеме

Алгоритмы сортировки
В этом разделе мы рассмотрим различные алгоритмы решения задачи сортировки. Задача сортировки ставится следующим образом: дана последовательность записей R1,R

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги