首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

在读取set集合时遇到如上有关问题,求解

2013-01-06 
在读取set集合时遇到如下问题,求解本人刚开始学习Delphi,所用Delphi版本为7,在自行以下代码时遇到Incompat

在读取set集合时遇到如下问题,求解
本人刚开始学习Delphi,所用Delphi版本为7,在自行以下代码时遇到Incompatible types问题,求高手给予帮助


unit EmunDemo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  //定义集合
  TStringSet = set of char;
  //定义枚举
  TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
  TForm1 = class(TForm)

    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  m: TMyEnum;
  num: Integer;
begin
  num:=0;
  // 返回枚举类型的长度
  for m:=Low(TMyEnum) to High(TMyEnum) do
     Inc(num);
  ShowMessage(IntToStr(num));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  character : 'a'..'z';  
  stringSet: TStringSet;
  word: string;
  s: char;
begin
  //stringSet:= [];
  //循环从character中读取元素,
  for s:= Low(character) to High(character) do
  begin
    if s in ['d','e','l','p','h','i'] then
    begin
      //添加元素
      Include(stringSet,s);
    end;
  end;

  //读取元素
  for s:= Low(stringSet) to High(stringSet) do
    word := word + s;
  ShowMessage(word);
end;

end.

[解决办法]
if (s = 'd') or (s = 'e')//直接改成这个方式。
[解决办法]


procedure TForm1.btn1Click(Sender: TObject);
var
  m: TMyEnum;
  num: Integer;
begin
  num:=0;


//   返回枚举类型的长度
  for m:=Low(TMyEnum) to High(TMyEnum) do
     Inc(num);
  ShowMessage(IntToStr(num));

  //通过下标计算元素个数  与上边的方法结果相同
  num := integer(High(TMyEnum)) - integer(Low(TMyEnum)) + 1;
  ShowMessage(IntToStr(num));
end;


[解决办法]
D7不支持 for in语法

只能通过最大集去遍历匹配
你的使用环境, character就是最大集


for s:= Low(character) to High(character) do
  begin
    if s in vStringSet then
    begin
      word := word + s;


    end;
  end;

热点排行