集合类型 用不了了吧  
有没有好得简洁算法   就如同集合判断 '1' in ['0'...'9']  

解决方案 »

  1.   

    据说Delphi2007支持集合当中的子集(in)操作。具体没有做过研究。
      

  2.   

    如果仅仅查找一个子串是否在一个长的字符串当中,使用pos函数,如果返回值大于0,则表示存在;
    如果要查找一个字符串是否在一个字符串集合中,就要使用TStringList了,将字符串集合导入TStringList中,然后通过IndexOF属性来判断
      

  3.   

    一楼得 误解了 
    我是判断 某个字符串  如 '101a'  是否在一个可能得取值集合中 '201a'   '205b'   '101a'     101a  是否在 后面得3个之中  
    再次感谢  我得是  D7  
      

  4.   

    汗,虽然支持了 for [each] in,但是却还是不支持 in判断。看来要进行子集操作,还是得使用搜索。
      

  5.   

    恩 感谢 僵哥 测试  D2007 我在测试 Tstringlist   indexof  是否区分 101a  101A  大小写
      

  6.   

    转论坛上的一个方法,原创者quickkeyboard和jinjiazz
      program   AB5000;   
      {$APPTYPE   CONSOLE}   
        
      const   
          MaxVal   =   300000;   
        
      const   
          a:   array   [0..5]   of   string=('aba','bcd','afa','agwe','aaf','abweb');   
          b:   array   [0..5]   of   string=('aba','bcd','dfe','agwe','aaf','abweb');   
      var   
          d:   array   [0..MaxVal-1]   of   Byte;   
          i,m:   Integer;   
      function   ELFHash(s:   String):   Integer;   
      var   
          g,   h,   i:   LongWord;   
      begin   
          h   :=   0;   
          for   i:=1   to   Length(s)   do   
          begin   
              h   :=   h   shl   4   +   Ord(s[i]);   
              g   :=   h   and   $f0000000;   
              if   g   <>   0   then   
              h   :=   h   xor   (g   shr   24);   
              h   :=   h   and   (not   g);   
          end;   
          Result   :=   h   mod   MaxVal;   
      end;   
      begin   
          //   清空Hash表   
          FillChar(d,   MaxVal*Sizeof(Byte),   0);   
          //   构造数组a的Hash表   
        
        
          for   i:=0   to   5   do   
            inc(d[ELFHash(a[i])]);   
          //   在数组a的Hash表中查找数组b的元素   
          for   i:=0   to   5   do   
              if   d[ELFHash(b[i])]<>0   then   
                  Write(b[i],   '   ');   
          Writeln;   
          Readln;   
      end.   适合大型运算
    同时我也想问一下大家pchar类型的数据怎么用此算法找到交集
      
      

  7.   

    pos不好,我最不喜欢用,不严密。因为不能精确定位(除非有明确分割符,连同分隔符一起搜,不过还得特殊处理开头和结尾两个串)较推荐用StringList,不过话说StringList的IndexOf其实还是遍历。如果对效率要求很高,先把这些字符串按字母顺序构建一棵树如何?不过我觉得遍历字符串应该不会有什么效率问题,至少1000-2000项还看不出来。
      

  8.   

    不区分大小写       晕     101a       101A     我哭   非让我用   数组   判断呀     有没有   类似字符串搜索的
    =========================================================设置CaseSensitive属性
      

  9.   

    好了 测试通过  一开始我也设置了  现在可以了  哎   怪我 
      var aa:TStringList ;
    begin
      aa:=TStringList.Create ;
      aa.Add('101a');
      aa.Add('101A');
      aa.Add('500a');
      aa.CaseSensitive :=True ;  ShowMessage(IntToStr(aa.IndexOf('101A')));end;