Pascal - 查找元素是否存在于集合中

时间:2016-12-01 07:52:58

标签: pascal

我有一个这样的代码:

program Project1;
uses crt;
type alph=set of 'A'..'Z';
var mn:alph;

begin
  clrscr;
  if ('A' in mn) then writeln( 'Yes');
  readln;
end.   

它没有打印任何内容,它会引发一些问题: project1.lpr(11,14)警告:变量" mn"似乎没有初始化 我不明白为什么,有什么不对吗?

2 个答案:

答案 0 :(得分:4)

声明

type
  Alpha = set of 'A'..'Z';

只是说Alpha是一种类型,允许包含AZ之间的零个或多个字母。这并不意味着该类型的变量自动包含该集合的每个元素;它只是意味着变量将包含该范围内的一组字符。

var
  mn: Alpha;                // Uninitialized variable that can contain 
                            // characters between 'A'..'Z'.
begin
  mn := ['A'..'Z'];         // Valid set of every member
  mn := ['A', 'C', 'X'];    // Valid set of three members

编译器正确地告诉您,您没有为mn分配任何值,因此您使用的是未初始化的变量。

BTW,大多数Pascal方言的标准惯例是使用T作为序言,以明确它是一种类型。因此,考虑到这一点,这里是您发布的修正代码的工作版本。

program Project1;

uses 
  crt;

type 
  TAlpha=set of 'A'..'Z';

var 
  mn: TAlpha;
begin
  clrscr;
  mn := ['A'..'Z'];
  if ('A' in mn) then
    Writeln('A is in mn');
  {
    My preference to the if statement above - prints true or false
    depending on whether the character is in the set, so you get output
    either way.
  }
  WriteLn('A in mn: ', ('A' in mn));
  Readln;
end.   

要解决您的其他问题(请参阅下面的评论):

要检查字符串以查看所有字符是否都是数字(' 0' ...' 9'),您可以执行以下操作:

function IsNumeric(const str: string): Boolean;
var
  i: Integer;
begin
  Result := True;
  for i := 1 to Length(str) do
    if not (str[i] in ['0'..'9']) then
      Result := False;
end;

答案 1 :(得分:0)

不,到目前为止没有任何错误。但是,正如警告所说,nm未初始化。您将遇到未定义的行为(我不确定这是否可以在Pascal中实现)或者代码片段没有任何用处 - 您希望检查mn是否包含'A',但是还没有放入任何进入mn的内容。