delphi实现字符串中数字的判断及相应数字累加

写上来看大家是否还有更优化的写法,欢迎讨论:

下面实现将字符串"10ad200d3" 中的数字合计,10+200+3=213

 


var s1:string;
var i:integer;
var n1:integer;
var tem1: string;
var tem2:integer;

  s1:='10ad200d3';  //  要处理的字符串
  tem1:='';         //用来存放得到的数字型字符
  tem2:=0;          //用来存放合计数
  n1:=1;            //用来存放统计到位数 ,即现时判断到哪一位置了
  for i:=1 to length(s1) do
  begin

//当遇到字符时
       if not (s1[i] in ['0'..'9','.']) then  //判断字符串中某个字符是否是数字
       begin
        if i<>1 then      //当第一个就是字符时,对于本例是不用作任何处理
        begin
           if tem1<>'' then    //将这个字符前面 数字相加
           begin
           tem2:=tem2+strtoint(tem1);
           tem1:='';
           end;
        end;
          n1:=i+1;  //位置向前推一位
       end;

       if  (s1[i] in ['0'..'9','.'])then
       begin

         tem1:=tem1+copy(s1,n1,1); //这种处理主要是为如果连续出现数字时
         n1:=i+1;
       end;


  end;

  if tem1<>'' then      //将最后的数据相加
     begin
           tem2:=tem2+strtoint(tem1);
     end;
   showmessage(inttostr(tem2));

 

 

最后得到的结果是213

以上代码在delphi7.0测试通过!

 

 

上面的情况还有一点没有考虑到,就是如果是连接出现数字,但前面一个数字是0时,合计数应该出错.不过,处理这个问题应该也比较简单,在累加前加上10000000 后再添加即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值