字符型的集合,如何求其所有真子集?

解决方案 »

  1.   

    procedure TForm1.getn(ss, ss1: string; count: Integer; var str: TStrings);
    var
      i,j,m,n:Integer;
      s,s1,s2,s3:string;
      str1,str2:TStrings;
    begin
      str1:=TStringList.Create;
      str1.Clear;
      str2:=TStringList.Create;
      str2.Clear;
      ExtractStrings([','],[],PChar(ss),str1);
      i:=str1.Count;
      if i=0 then
        Exit;
      for j:=1 to i do
      begin
        s1:=str1.Strings[j-1];
        if ss1='' then
          s3:=ss1+s1
        else
          s3:=ss1+'|'+s1;
        str2.Clear;
        ExtractStrings(['|'],[],PChar(s3),str2);
        if str2.Count=count then
        begin
          str.Add(s3);
          Continue;
        end;
        s2:='';
        for n:=j to i-1 do
          s2:=s2+str1.Strings[n]+',';
        Self.getn(s2,s3,count,str);
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      s1,s2:string;
      str,str1:TStrings;
      i,j,m,n:Integer;
    begin
      s1:=Trim(self.Edit1.Text);
      if s1='' then
        Exit;
      str:=TStringList.Create;
      str.Clear;
      str1:=TStringList.Create;
      str1.Clear;
      ExtractStrings([','],[],PChar(s1),str1);
      i:=str1.Count;
      for j:=1 to i-1 do
        self.getn(s1,'',j,str);
      i:=str.Count;
      self.Memo1.Lines.Clear;
      self.Memo1.Lines.Add('');//空子集也是真子集
      for j:=0 to i-1 do
      begin
        s1:=str.Strings[j];
        self.Memo1.Lines.Add(s1);
      end;
    end;
      

  2.   

    谢谢,我自己也做了个函数,递归出结果了
    function solve(ss: string;bb:string):string;
    请问我如何把这个字符串传到
    procedure TForm1.Button3Click(Sender: TObject);
    里面,函数调用是第一次,呵呵,请教了!
      

  3.   


    procedure TForm1.Button3Click(Sender: TObject);
    var
      s:tring;
    begin
      s:=self.solve(ss,bb:string);
    end;
      

  4.   

    我是这样写的,可是为空,但是我在函数里面showmessage有结果,为什么呢?
      

  5.   

    这不太可能吧,你函数代码中showmessage那部分发上来看看