在读取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;