unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
dlgOpen1: TOpenDialog;
mmo1: TMemo;
btn2: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
f:Text;
//type
// Tint=0..9;
// T1=set of Tint;
// Tc1='a'..'z'; //一开始想用集合,这样做不对
// T2= set of Tc1;
// Tc2='A'..'Z';
// T3=set of Tc2;
// Tf=(byte(,),byte(.),byte(?),byte(!),byte(/));
// Tf=(byte(','),byte('.'),byte('?'),byte('!'),byte('/'));
// t4:set of Tf;
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
if dlgOpen1.Execute then
AssignFile(f,dlgOpen1.FileName);
Reset(f);
end;
procedure TForm1.btn2Click(Sender: TObject);
var
s1,s2:string;
n,i:Integer;
fg:Boolean;
// t11:T1;
// t22:T2;
// t33:T3;
begin
Readln(f,s1);
n:=Length(s1);
for i:=n downto 0 do
begin
// s2:=s2+s1[i];
if s1[i] in ['0'..'9','A'..'Z','a'..'z'] then //直接用集合
s2:=s2+s1[i]
else begin
if fg=False then begin
s2:=s2+s1[i-1]+s1[i];
fg:=True;
end else
fg:=False;
end;
end;
mmo1.Lines.Add(s2);
end;
end.
{
问题: 在Delphi中,如何将集合数据类型中的某元素取出来?如set1:=[1,2,3,4,5,6]中的第三项3取出放入一变量中。
Delphi的集合不同于数组或者List或者VB的Collection,它的元素是没有顺序,所以不存在某个集合中的第3项的说法。
你只能用in判断某个元素是否在Delphi的集合中。如
if 3 in set1 then
...
else
...
例如 防止输入非整数字符
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [’0’..’9’, #8]) then //防止输入非整数字符
key := #0;
end;
}
///////////////////////////////////////////////////////////////
{1、子界类型:定义了某种类型的取值范围 类型!!!
type
ten=1..10;
OverHundred=100..1000;
Uppercase='A'..'Z';
只需基类的两个常数,!!!有序!!!会产生另一个有序类型!!!ten,OverHundred,Uppercase。
定义一个子界变量:
var UpperLetter:UpperCase;
begin
UpperLetter:='F';对,'f'错。
UpperLetter:UpperCase;
Letter:Char
2、枚举类型:有序!!!列出可能取的值,不是范围
type
Color=(Red,Yellow,Green,Cyan,Blue);
序列中每个值对应一个序号,从0开始,用Ord(Red),返回0,得到序号。
3、集合类型: 表示一组值,由集合所依据的有序类型定义。
有序类型有(枚举类型,子界类型...)
type
Letter=set of UpperCase; Letter可能包括UpperCase的0个,1个,所有值。
var
Letter1,Letter2,Letter3:Letter;
begin
Letter1:=['A','B','C'];
Letter2:=['K'];
4、数组类型:
type
Day=array[1..31] of Integer;//字节类型值也可;
多维:Year=array[jan..dec,1..31];“,”隔开
5、记录类型:
type
Date = Record
Year:Integer;
Month:Byte;
Date:Byte;
end;}