str := '1-3,4-6,7-9,10-12,13-15,16-18,19-21,22-24'   // 代表数值区间,1到3,4到6,7到9的意思,以此类推....假设现在有一个数值num,怎么判断这个数值属于str的哪一个区间里面的呢?比如 num := 8 ,按说,num 应该在"7-9"这个区间内,我要的结果就是根据num的值,取得相应的区间,得到 bstr := '7-9',这样的,怎么写代码? 

解决方案 »

  1.   

    Tstringlist 
      

  2.   

    定义集合或者结构
    或者用tstringlist 然后循环判断。
      

  3.   

    Tstringlist 赋值之后
    然后循环判断
    或者二分法
      

  4.   

    num>=2 --->  位于区域  (num-1)--(num+1)
      

  5.   

    var
      sl: TStringList;
      s: string;
      i, num: Integer;
    begin
      sl := TStringList.Create;  try
        sl.Delimiter := ',';
        num := 8;
        sl.DelimitedText := '1-3,4-6,7-9,10-12,13-15,16-18,19-21,22-24';
        for i := 0 to sl.Count - 1 do
        begin
          s := sl[i];
          if (num > StrToInt(s[1]) - 1) and (num < StrToInt(s[3]) + 1) then
            ShowMessage(sl[i]);
        end;
      finally
        sl.Free;
      end; // try
      

  6.   

    var
      str, bstr: string;
      num, I: Integer;
    begin
      str := '1-3,4-6,7-9,10-12,13-15,16-18,19-21,22-24';
      num := 8;  with TStringList.Create do
        try
          CommaText := StringReplace(str, '-', ',', [rfReplaceAll]);
          for I := 0 to Count - 1 do
            if StrToInt(Strings[I]) > num then
            begin
              bstr := Strings[I-1]+'-'+Strings[I];
              ShowMessage(bstr);
              Break
            end;
        finally
          Free
        end;
    end;
      

  7.   

       改一下   
            case Num mod 3 of
            0:  bStr:=IntToStr(Num-2) + '-' +IntToStr(Num);
            1:  bStr:=IntToStr(Num)     + '-' +IntToStr(Num+2);
            2:  bStr:=IntToStr(Num-1) + '-' +IntToStr(Num+1);
      
      

  8.   

    上面少了一个 end
      

  9.   


    给你写个函数吧,这应该是你想要的结果。
    直接传入数值就可以判断范围了。
    function ShowMSG(num:integer):string;
    var
      str:string;
    begin
      str := '';
      case num of
        1..3:
        begin
          str := '1-3';
        end;
        4..6:
        begin
          str := '4-6';
        end;
        7..9:
        begin
          str := '7-9';
        end;
        10..12:
        begin
          str := '10..12';
        end;
        else
        begin
          str := 'not found';
        end;
      end;
      result := str;
    end;
      

  10.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      showmessage(ShowMSG(3));
    end;
      

  11.   

    const a: array [1..24] of integer =(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8);  
    const al: array [1..8] of integer =(1,4,7,10,13,16,19,22);  
    const ah: array [1..8] of integer =(3,6,9,12,15,18,21,24);function areaof(n:integer):integer;
    begin 
           areaof :=a[n];
    end;  
    function arealow(n:integer):integer;
    begin
           arealow :=al[n];
    end;
    function areahigh(n:integer):integer;
    begin
           areahigh :=ah[n];
    end;