CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

关于字符串处理方面的算法!请高手多多执教!

楼主duweizhong78(阿杜)2004-12-02 16:49:10 在 Delphi / 语言基础/算法/系统设计 提问

s='1;2;3;4;5;6;7;8;9;10;11;'  
  如果要将分号之间的数字存入一个数组p[]中,算法该如何写,我不知道delphi中字符串的截取函数。 问题点数:0、回复次数:9Top

1 楼suuare(督察)回复于 2004-12-02 16:58:18 得分 0

var   i,j:   Integer;  
          P:   array   [1..11]   of   integer;  
          TP:   String;  
  begin  
      j   :=   1;  
      for   i   :=   1   to   length(S)   do  
          begin  
              if   S[i]   <>   ';'   then  
                TP   :=   TP   +   S[i];  
              else  
                  begin  
                      P[j]   :=   StrToInt(TP);  
                      TP   :=   ';    
                  end;  
          end;  
  end;Top

2 楼bookong(不空<)回复于 2004-12-02 16:59:50 得分 0

大概就是下面的意思,可能有手误,你自己调一下  
  //变量  
  p:array   of   integer;  
  i,idx:Integer;  
   
  //代码  
  idx=0;  
  while   not   i   do  
  begin  
      i:=Pos(';',s);  
      Inc(idx);  
      SetLength(p,idx);  
      p[idx-1]:=StrToInt(Copy(s,1,idx-1));  
      Delete(s,1,idx);  
  end;  
       
  Top

3 楼twlx_0(流星)回复于 2004-12-02 17:02:03 得分 0

var   s,x:string;  
          i:integer;  
  begin  
  s:='1;2;3;4;5;6;7;8;9;10;11';  
  i:=pos(';',s);  
  x:=leftstr(s,i-1);  
  showmessage(x);  
  delete(s,1,i);  
  showmessage(s);  
  end;  
  思路就是这样的!!Top

4 楼twlx_0(流星)回复于 2004-12-02 17:03:10 得分 0

已经有人写了,  
  就是上面的仁兄那样写的。  
  我没有写循环语句。Top

5 楼bookong(不空<)回复于 2004-12-02 17:07:01 得分 0

//变量  
  p:array   of   integer;  
  i,idx:Integer;  
   
  //代码  
  idx=0;  
  while   i   do   //不好意思,这里改一下  
  begin  
      i:=Pos(';',s);  
      Inc(idx);  
      SetLength(p,idx);  
      p[idx-1]:=StrToInt(Copy(s,1,idx-1));  
      Delete(s,1,idx);  
  end;  
  Top

6 楼ICMGDCHN(忘记感动)回复于 2004-12-02 17:11:47 得分 0

var  
      strlist:TStrings  
      i:integer;  
      p:array   of   integer;  
  begin  
      strlist:=TStringList.Create;  
      strlist.delimiter=';';  
      strlist.delimitertext:=s;     //s:='1;2;3;4;5;6;7;8;9;'  
      Setlength(p,strlist.count);  
      for   i:=0   to   strlist.count-1   do  
          p[i]:=StrToInt(strlist[i]);  
      strlist.free;  
  end;  
  Top

7 楼wizardqi(男巫)回复于 2004-12-02 17:20:05 得分 0

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls;  
   
  type  
      TIntArray=array   of   Integer;  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
  function   SplitStrToInt(Str1,Str2:String;var   NumArray:TIntArray):Integer;  
  var  
            p,lp,l1,l2:Integer;  
            subs:String;  
  begin  
            l1:=Length(Str1);  
            l2:=Length(Str2);  
            p:=1;  
            SetLength(NumArray,l1   div   2);  
            Result:=0;  
            repeat  
                      lp:=Pos(Str2,Str1);  
                      subs:=Copy(Str1,p,lp-1);  
                      Str1:=Copy(Str1,lp+l2,l1-lp-l2+1);  
                      l1:=Length(Str1);  
                      if(trim(subs)<>'')then  
                      begin  
                                NumArray[Result]:=StrToInt(subs);  
                                Inc(Result);  
                      end;  
            until   l1=0;  
  end;  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
            a:TIntArray;  
            l,i:Integer;  
  begin  
              l:=SplitStrToInt('12;322;12422;100;',';',a);  
              for   i:=0   to   l-1   do  
              ShowMessage(IntToStr(a[i]));  
              l:=SplitStrToInt('12@@@322@@@12422@@@100@@@','@@@',a);  
              for   i:=0   to   l-1   do  
              ShowMessage(IntToStr(a[i]));  
  end;  
   
  end.  
  Top

8 楼zdq801104(【☆这个杀手不太冷☆】)回复于 2004-12-02 17:25:11 得分 0

ICMGDCHN(60   DAYS->喜欢明月)   是正解,比较方便Top

9 楼ksaiy(阳光总在风雨后)回复于 2004-12-02 20:56:45 得分 0

function   PartitionString(StrV,PrtSymbol:   string):   TStringList;  
  var  
      iTemp:   integer;  
  begin  
      result   :=   TStringList.Create;  
      iTemp   :=   pos(PrtSymbol,StrV);  
      while   iTemp>0   do   begin  
          if   iTemp>1   then   result.Append(copy(StrV,1,iTemp-1));  
          delete(StrV,1,iTemp+length(PrtSymbol)-1);  
          iTemp   :=   pos(PrtSymbol,StrV);  
      end;  
      if   Strv<>''   then   result.Append(StrV);  
  end;  
   
  调用的时候这样:  
  var  
      Str:TStrings  
  begin  
      Str:=PartitionString('1;2;3;4;5;6;7;8;9;10;11',';');  
  end;  
   
  Str就是你要的了。Top

相关问题

  • 讨论:字符串处理算法
  • 字符串处理
  • 字符串处理!!!
  • 字符串处理
  • 字符串处理!
  • 字符串处理
  • 字符串处理,
  • 字符串处理
  • 字符串处理
  • 字符串处理?

关键词

  • strlist
  • strv
  • idx
  • itemp
  • prtsymbol
  • splitstrtoint
  • tintarray
  • strtoint
  • integer
  • showmessage

得分解答快速导航

  • 帖主:duweizhong78

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo