子范围声明的麻烦

时间:2013-12-08 17:00:13

标签: delphi delphi-2010

我试图这样做,所以一旦输入不同的文字,形状会改变颜色,但它表示('A ..'Z')是'预期'的问题但是收到字符串文字''A''' 。我不知道如何解决它。感谢任何帮助,谢谢!

type
  TCapitalLetter = ('A' .. 'Z' ); //subrange of type char
  TDigit = ('0' .. '9' ); //subrage of type char

1 个答案:

答案 0 :(得分:2)

你的定义很接近,但不太正确:

type
  TCapitalLetter = 'A'..'Z';
  TDigit = '0'..9';

但是,从你的另一个问题来看,我认为这不是你真正需要做的。您正在寻找成员资格(某些字符包含在该类型中),在这种情况下,您需要使用集合来完成。它是一个可以编译和测试的控制台应用程序:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TCapitalLetters = TSysCharSet; 
  TDigits = TSysCharSet;

const
  CapitalLetters: TCapitalLetters = ['A'..'Z'];
  Digits: TDigits = ['0'..'9'];

var
  Temp, Output: string;
  Ch: Char;

begin
  Output := '';
  Temp := 'Seems A Nice Test Answer';
  for Ch in Temp do
    if CharInSet(Ch, CapitalLetters) then
      Output := Output + Ch;

  WriteLn(Output);
  ReadLn;
end.

对于早期(非Unicode)版本的Delphi,您需要使用set of Char而不是TSysCharSet,并对集合成员使用略有不同的语法:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TCapitalLetters = set of Char;
  TDigits = set of Char;

const
  CapitalLetters: TCapitalLetters = ['A'..'Z'];
  Digits: TDigits = ['0'..'9'];

var
  Temp, Output: string;
  Ch: Char;

begin
  Output := '';
  Temp := 'Seems A Nice Test Answer';
  for Ch in Temp do
    if Ch in CapitalLetters then
      Output := Output + Ch;

  WriteLn(Output);
  ReadLn;
end.

测试应用程序的输出:

Screen capture of test app output