查找字符串‘11’在‘0100111001110011100110011001’中的出现位置和1的连续个数,连续出现1的次数大于等于2算一次,即‘111’算出现1次,个数为3,
谢谢回复!(大富翁上提问过,但无法登录)

解决方案 »

  1.   

    利用POS函數可以定位,然後你再從POS到的位置+2處開始比較是否為1,直到不是1,計算出累加的個數即可
      

  2.   

    function CountOneStr(const S: string; OneNum: Integer): Integer;
    var
      I, ONum: Integer;
    begin
      Result := 0;
      I := 1;
      while I <= Length(S) do
      begin
        if S[I] = '1' then
        begin
          Inc(I);
          if OneNum = 1 then
            Inc(Result)
          else
          begin
            ONum := 1;
            while (S[I] = '1') and (I <= Length(S)) do
            begin
              Inc(ONum);
              Inc(I);
            end;
            if ONum >= OneNum then Inc(Result);
          end;
        end
        else Inc(I);
      end;
    end;OneCount := CountOneStr('0100111001110011100110011001', 2);
      

  3.   

    to li_chengbin(小李飞刀) 大哥:
    查找字符串‘11’在‘0100111001110011100110011001’中的所有出现位置和1的连续个数,连续出现1的个数大于等于2算一次,即‘111’算出现1次,个数为3,输出所有出现的位置和出现的1连续的个数
      

  4.   

    uses Types;procedure CountOneStr(const S: string; OneNum: Integer; var Pos, Num: TIntegerDynArray);
    var
      I, P, ONum: Integer;
    begin
      Pos := nil;
      Num := nil;
      I := 1;
      while I <= Length(S) do
      begin
        if S[I] = '1' then
        begin
          P := I;
          Inc(I);
          ONum := 1;
          while (S[I] = '1') and (I <= Length(S)) do
          begin
            Inc(ONum);
            Inc(I);
          end;
          if ONum >= OneNum then
          begin
            SetLength(Pos, Length(Pos) + 1);
            SetLength(Num, Length(Num) + 1);
            Pos[High(Pos)] := P;
            Num[High(Num)] := ONum;
          end;
        end
        else Inc(I);
      end;
    end;const
      SrcStr = '0100111001110011100110011001110011111111';
    procedure TForm1.Button7Click(Sender: TObject);
    var
      Pos, Num: TIntegerDynArray;
      I: Integer;
    begin
      CountOneStr(SrcStr, 2, Pos, Num);
      Memo1.Lines.Add(SrcStr + ', ' + StringOfChar('1', 2));
      for I := 0 to High(Pos) do
        Memo1.Lines.Add(Format('Pos, Num: %d, %d', [Pos[I], Num[I]]));
    end;