如何计算Delphi中多维数组中字符的出现次数?

时间:2015-01-25 14:44:19

标签: delphi multidimensional-array

var
characters : array of array of char;

procedure TForm1.Button1Click(Sender: TObject);

var
spaces : integer;
nolines : integer;
linecounter : integer;
charcounter : integer;
space : char;

begin
  nolines := memo1.lines.count-1;
  setlength(characters, nolines+1);
  for linecounter := 0 to nolines do begin
    setlength(characters[linecounter], length(memo1.lines[linecounter]));
  end;
  space := ' ';
  spaces := 0;
  for linecounter := 0 to nolines do begin
    for charcounter := 0 to Length(characters[linecounter]) do begin
      if characters[linecounter,charcounter] = space then
        spaces := spaces +1;
    end;
  end;
  memo2.Lines.add(inttostr(spaces));
end;

我想计算一下我的memo1中出现空格的频率。我已将所有字符放在数组中进行练习,但每当我在备注中输入文本和空格时,空格的数量总是返回零。

1 个答案:

答案 0 :(得分:3)

你不需要阵列。您可以直接从控件中计算字符数:

function CharCount(Strings: TStrings; Character: Char): Integer;
var
  Line: string;
  C: Char;
begin
  Result := 0;
  for Line in Strings do
    for C in Line do
      if C = Character then
        inc(Result);
end;

然后你可以简单地写

Memo2.Lines.Add(IntToStr(CharCount(Memo1.Lines, ' ')));

查看您的代码,它实际上与您不初始化数组的事实不同。你得到的数组边界错误,运行内部数组的末尾。

最后一条评论。名为nolines的变量名称错误,因为它包含的行数少于行数。您应该将行数放在变量名nolines中,并从0循环到nolines-1。一个更惯用的名称选择是LineCount