文字倒序输出(集合)

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;}

posted @ 2013-05-25 18:59  梁彦坤  阅读(549)  评论(0编辑  收藏  举报