有字符串
'receive4380receive8760receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive17520receive14028'请大家帮忙 怎样把字符串里面的整数都取出来,然后相加?

解决方案 »

  1.   

    very easyvar
      pData : PChar;
      iDataLen : Integer;
      iIndex  : Integer;
    begin
      GetMem(pData,iDataLen);
      StrPCopy(pData,szDataBuf);//将你的这些数据拷入新分配的缓冲区
      iIndex := 0;
      for i := 0 to iDataLen do
      begin
        if (pData[i] > '0') and (pData[i] < 9) then
        begin
          while (true)
          begin
            if (pData[i + iIndex] > '0') and (pData[i + iIndex] < '9') then
            begin
              Inc(iIndex);
            end 
            else
            begin
              break;
            end;
          end;
          i := i + iIndex;
          iIndex := 0;
          //将pData[i] 到 pData[i + iIndex]截取,并存入预先建立的一个容器中
        end;
      end;
    end;
    这样你便可截取所有数字并将其存放在一个容器中,最后将容器中的所有元素相加既可,我的伪码有疏漏,可以自行修改,但思路绝对没问题,因为我刚刚完成和你类似的项目
      

  2.   

    // 已测试通过unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Mask, DBCtrls, DB, ADODB, DBTables;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function GetIntSumFromString(const Source, Sub: string): Integer;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.GetIntSumFromString(const Source, Sub: string): Integer;
    var
      StrPos: Integer;
      SubLen: Integer;
      Str: string;
      IntStr: string;
    begin
      Result := 0;
      Str := Source + Sub;         // 这样就不用每次在循环里判断
      Str := Trim(Str);
      if Str = '' then Exit;  SubLen := Length(Sub);
      while Str <> Sub do
      begin
        Delete(Str, 1, SubLen);
        StrPos := Pos(Sub, Str) - 1;
        IntStr := Copy(Str, 1, StrPos);
        Delete(Str, 1, StrPos);
        Result := Result + StrToInt(IntStr);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    const
      Sub = 'receive';
    var
      Str: string;
    begin
      Str := 'receive4380receive8760receive17520receive17520receive17520receive17520' +
        'receive17520receive17520receive17520receive17520receive17520receive17520receive17520';
      ShowMessage(IntToStr(GetIntSumFromString(Str, Sub)));
    end;end.
      

  3.   

    // 在将函数改一下:function TForm1.GetIntSumFromString(const Source, Sub: string): Integer;
    var
      StrPos: Integer;
      SubLen: Integer;
      Str: string;
      IntStr: string;
    begin
      Result := 0;
      Str := Trim(Source);
      if Str = '' then Exit;    // 如果为空退出
      Str := Str + Sub;         // 这样就不用每次在循环里判断  SubLen := Length(Sub);
      while Str <> Sub do
      begin
        Delete(Str, 1, SubLen);
        StrPos := Pos(Sub, Str) - 1;
        IntStr := Copy(Str, 1, StrPos);
        Delete(Str, 1, StrPos);
        Result := Result + StrToInt(IntStr);
      end;
    end;