Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Совместимость коротких и длинных строк с символьным типом




В Delphi короткие и длинные строки совместимы с символьным типом. Это выражается в том, что отдельные элементы строк являются символами и могут употребляться в тех конструкциях Delphi, где используются значения символьного типа (Char). И наоборот, отдельным элементам длинных и коротких строк можно присваивать значения символьного типа.

Как уже указывалось выше данные строкового типа можно рассматривать как одномерные массивы. Т.е., чтобы обратиться к отдельному элементу строки, необходимо после идентификатора (имени) строковой переменной в квадратных скобках указать выражение целого типа. Значение этого выражения определяет порядковый номер элемента (символа) строки.

Пример 7: va r Buf: ShortString;

C: char;

procedure TForm1.Button1Click(Sender: TObject);

Begin

Buf:='D lphi';

C:='A';

Buf[2]:='e';

Edit1.Text:=Buf;

Edit2.Text:= IntToStr(Ord(Buf[0]));

Buf[7]:=C;

Edit3.Text:=Buf;

Edit4.Text:= IntToStr(Ord(Buf[0]));

end;

Присваивание отдельным элементам строки не влияет на её длину. Поэтому в примере 7 (см. рис. 1) в компонент Edit1 выводится строка Delphi, в компонент Edit2 - число 6, в компонент Edit3 - снова Delphi, в компонент Edit4 - снова число 6.

Операции над данными строкового типа

Данные строкового типа можно:

1. Сравнивать, используя операции отношений (>, >=, <,,<=, =, <>);

2. Выполнять операцию сцепления (конкатенации), которая обозначается знаком «+».

 

Рис. 1. Результат выполнения примера 7.

Пример 8: var Line:string;

procedure TForm1.Button1Click(Sender: TObject);

Begin

Line:=¢1234¢;

Line:= Line + ¢abc¢

Edit1.Text:= Line;

end;

В примере 8 в компонент Edit1 будет выведена строка символов ¢1234abc¢.

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

Пример программирования с использованием данных строкового типа

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

Схема алгоритма

Исходные данные: входная строка s1;

Выходные данные: выходная строка s2.

Схема алгоритма формирования выходной строки в соответствии с заданием приведена на рис. 2.

Рис. 2. Схема алгоритма формирования выходной строки.

Дополнительные переменные:

l - длина входной строки;

dl - количество слов во входной строке;

a - двумерный массив, состоящий из dl строк и двух столбцов; первый столбец содержит номер символа во входной строке, с которого начинается очередное слово, второй столбец - длину слова;

i - номер слова во входной строке;

ss1 - первое слово входной строки;

sst - очередное слово входной строки;

m - количество повторений очередного слова во входной строке;

l1 - длина выходной строки.

Схема алгоритма подпрограммы Struct, формирующей массив а, содержащий информацию о местоположении и длине очередного слова во входной строке приведена на рис. 3.

Рис. 3. Схема алгоритма подпрограммы Struct.

Входные параметры:

s - строка символов;

l - длина строки;

Выходные параметры:

a - двумерный массив, содержащий информацию о структуре строки;

k - количество сток в массиве а (количество слов в строке s)

Дополнительные переменные:

c - счётчик количества символов в слове;

i - индекс элемента массива s (номер очередного символа в строке).

Схема алгоритма подсчёта количества повторений очередного слова в строке символов (Schet)приведена на рис. 4.

Рис.4. Схема алгоритма Schet - подсчёта количества повторений

i-го слова в строке символов.

Входные параметры:

sst - очередное слово;

s1 - входная строка символов;

i - номер слова в строке;

dl - количество слов в строке;

a - двумерный массив, содержащий информацию о структуре строки;

Выходные параметры:

m - количество повторений очередного (i-го) слова в строке символов.

Схема алгоритма проверки повторения очередного слова строки среди слов, расположенных перед ним (Prov1) приведена на рис. 5.

 

Рис.5. Схема алгоритма Prov1 - проверки повторения очередного слова строки среди слов, расположенных перед ним.

Входные параметры:

sst - очередной слово;

s1 - входная строка символов;

n - количество слов в строке, расположенных перед проверяемым;

a - двумерный массив, содержащий информацию о структуре строки;

Выходные параметры:

f - логическая переменная - признак повторения очередного слова (при f = false).

Дополнительные переменные:

j - номер слова в строке при проверке;

ss - j-ое слово в сроке при проверке.

Схема алгоритма проверки повторения очередного слова строки среди слов, расположенных после него (Prov2) приведена на рис. 6.

Рис. 6. Схема алгоритма Prov2 - проверки повторения очередного слова строки среди слов, расположенных после него.

Входныепараметры:

sst - очередное проверяемое слово;

s1 - входная строка символов;

i1 - номер слова, расположенного после проверяемого;

i2 - количество слов в строке;

a - двумерный массив, содержащий информацию о структуре строки;

Выходные параметры:

m1 - количество повторений очередного слова в строке символов.

Дополнительные переменные:

j - номер слова в строке при проверке;

ss - j-тое слово в сроке при проверке.

Текст программы

program Project_str;

 

Uses

Forms,

Unit_str in 'Unit_str.pas' {Form1};

 

{$R *.res}

 

Begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

 

unit Unit_str;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls;

Type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit; // поле для ввода исходной строки

Label2: TLabel;

Edit2: TEdit; // поле для ввода сформированной строки

Button1: TButton; // кнопка выполнения

Button2: TButton; // кнопка очистки

Memo1: TMemo;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

End;

 

Var

Form1: TForm1;

Implementation

{$R *.dfm}

type Tst r = array [1..15,1..2] of integer;

var s1,s2:string;

 

procedure Strukt(s1:string;l:integer; var a:tstr; var k:integer);

var c,i:integer;

Begin

k:=0;

c:=0;

for i:=1 to l do

if (s1[i]=' ') or (s1[i]=',')

Then

Begin

if c>0 then

Begin

k:=k+1;

a[k,1]:=i-c;

a[k,2]:=c;

c:=0;

end;

End

else c:=c+1;

end;

 

function Prov1(sst,s1:string;n:integer;a:tstr): boolean;

var j:integer;

ss:string;

Begin

Result:= true;

for j:=1 to n do

Begin

ss:=copy(s1,a[j,1],a[j,2]);

if ss=sst then

result:=false;

end;

end;

function Prov2 (sst,s1:string;i1,i2:integer;a:tstr):integer;

var j,m1:integer;

ss:string;

Begin

m1:=1;

fo r j:=i1 to i2 do

Begin

ss:=copy(s1,a[j,1],a[j,2]);

if ss=sst then

m1:=m1+1;

end;

result:=m1;

end;

 

function Schet (sst,s1:string;i:integer;a:tstr;k:integer):integer;

var f1: boolean;

m:integer;

Begin

m:=1;

f1:=prov1(sst,s1,i-1,a);

if f1 then

m:=prov2(sst,s1,i+1,k,a);

Result:=m;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var a:tstr;

ss1,sst:string;

m,i,l,dl:integer;

Begin

s1:=edit1.Text;

s1:=s1+' ';

l:=length(S1);

if l>1 then

Begin

struсt(s1,l,a,dl);

if dl>1 then

Begin

ss1:=copy(s1,a[1,1],a[1,2]);

s2:='';

for i:=2 to dl do

Begin

sst:=copy(s1,a[i,1],a[i,2]);

if ss1<>sst then

Begin

m:=Schet(sst,s1,i,a,dl);

if m>2 then

s2:=s2+sst+' ';

end;

end;

if length(s2)>0 then

edit2.Text:=s2

else ShowMessage('Выходная строка пустая');

End

else ShowMessage('Слов нет');

End

else ShowMessage('Входная строка пустая');

end;

 

procedure TForm1.Button2Click(Sender: TObject);

Begin

edit1.Clear;

edit2.Clear;

edit1.SetFocus;

end;

end.





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


Дата добавления: 2015-11-23; Мы поможем в написании ваших работ!; просмотров: 315 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2227 - | 2155 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.