1.实现字符串 导入(str 是那个字符串)  arr_i:=1;
  substr:='';
 for i=1 to length(str) do 
  begin
    
    if (copy(str,i,1)='@' ) or (i=length(str))  then 
        begin
        stringarray[arr_i]:=substr;
        substr:='';
        arr_i:=arr_i+1;
        end
       else
        substr:=substr + copy(str,i,1)
   end;    

解决方案 »

  1.   

    自己做吧
    function sp(s,c)  用c截断s
    r:array of string
    i:=pos(c,s)
    j:=0
    while i>0 begin
      r[j]:=copy(s,1,i-1)
      s:=copy(s,i+1,200000)
      j:=j+1
      i:=pos(c,s)
    end
    r[j]:=s
    result:=r
    只是算法示意,不是程序哦
      

  2.   

    谢谢
    to IUPRG,scripting(排名不分先后!):
    俺起先也是用此法,当字符串很长的时候速度不理想,
    所以来问问有没别的更好的方法。第2个问题呢?
      

  3.   

    1)我给你一段代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
      stringarr:Array[1..50] of string;
      flagarr:Array[1..50] of integer;//用来存@在s中的位置
      i,j,number:integer;//number用来标志@的个数
    begin
      j:=0;number:=0;
      s:=inputbox('输入串','请输入一个串','');
      for i:=1 to length(s) do
        if copy(s,i,1)='@' then
        begin
          j:=j+1;number:=number+1;//j用来控制数组flagarr单元位置
          flagarr[j]:=i;//存入@在串中所在的位置
        end;
      j:=1;
      for i:=1 to number do
      begin
          stringarr[i]:=copy(s,j,flagarr[i]-j);
          showmessage(stringarr[i]);
          j:=flagarr[i]+1;
      end;
      stringarr[i+1]:=copy(s,j,length(s)-j+1);
      showmessage(stringarr[i+1]);
    end;
    2)我并不觉这个很重要  
      

  4.   

    我将代码改进了,你看看如何?我想降低效率的代码是:(copy(str,i,1)='@' ) 和substr:=substr + copy(str,i,1)这些都导致不停的重新分配内存,所以我改进了,不过没来的及调试,你试一下吧            ....
    var substr:ansistring;
     ...
    begin
    ...
      arr_i:=1;
      setlength(substr,100);  //100是你中间的字符串的最大估计  
      substr:='';
    for i=1 to length(str) do 
      begin
        
        if (str[i]='@' ) or (i=length(str))  then 
            begin
            Delete(substr,100-j,j+1);
            stringarray[arr_i]:=substr;
            j:=1;
            inc(arr_i);
            end
          else
            begin
            substr[j]:=str[i];
            inc(j);
            end;
      end;  
      

  5.   

    memo控件指定 滚动栏后 不用设定宽和高吧
    它自动适应。不知你是如何打算的?
      

  6.   

    to IUPRG,scripting(排名不分先后!):
    第一个问题速度上是没问题了呵~~~~至于第二个问题,俺是希望memo控件能完全显示其内容(不大不小刚好)
      

  7.   

    memo放在什么地方呢?折行吗...
      

  8.   

    TO SCRIPTING:
    MEMO是放在普通FORM上的,比如有个MEMO的高和宽都为10,且内容为空,
    然后再将一长串字符赋给MEMO,这时MEMO出现了滚动栏(高和宽还是没变的)
    而我要的功能是,MEMO能根据内容自动调整大小(高和宽),以便用户可以看见所有的内容。比如MEMO的ENABLED的属性为FALSE时,赋一长串TEXT后用户就点不了滚动栏了。
      

  9.   

    我写的怎么没了?
    memo.width:=(max length of memo.lines[])X 字符宽的系数
    memo.height:=(memo.lines.count) X 行高系数
    就是宽和高
      

  10.   

    其实你可以固定memo的宽,这样就知道一行有几个字符;
    其次用 memo.lines.count 乘以 字符高度(行高)来指定memo.height