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

在Delphi中,如何计算多维数组中字符的出现次数?,delphi,multidimensional-array,Delphi,Multidimensional Array,我想计算一下我的备忘录中出现空格的频率。我已将所有字符放入一个数组中进行练习,但每当我在备忘录中输入文本和空格时,空格数总是返回零。您不需要数组。您可以直接从控件中计数字符: var characters : array of array of char; procedure TForm1.Button1Click(Sender: TObject); var spaces : integer; nolines : integer; linecounter : integer; charcou

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

您不需要数组。您可以直接从控件中计数字符:

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;
然后你就可以写了

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;
看看你的代码,它基本上是工作的,除了你没有初始化数组这一事实。你得到了错误的数组边界,从内部数组的末尾开始


最后一点意见。名为
nolines
的变量命名错误,因为它的行数少于一行。您应该在变量名
noline
中输入行数,并从
0
循环到
noline-1
。更惯用的名称选择是
LineCount

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

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;
然后你就可以写了

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;
看看你的代码,它基本上是工作的,除了你没有初始化数组这一事实。你得到了错误的数组边界,从内部数组的末尾开始


最后一点意见。名为
nolines
的变量命名错误,因为它的行数少于一行。您应该在变量名
noline
中输入行数,并从
0
循环到
noline-1
。更惯用的名称选择是
LineCount

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

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;
然后你就可以写了

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;
看看你的代码,它基本上是工作的,除了你没有初始化数组这一事实。你得到了错误的数组边界,从内部数组的末尾开始


最后一点意见。名为
nolines
的变量命名错误,因为它的行数少于一行。您应该在变量名
noline
中输入行数,并从
0
循环到
noline-1
。更惯用的名称选择是
LineCount

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

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;
然后你就可以写了

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;
看看你的代码,它基本上是工作的,除了你没有初始化数组这一事实。你得到了错误的数组边界,从内部数组的末尾开始


最后一点意见。名为
nolines
的变量命名错误,因为它的行数少于一行。您应该在变量名
noline
中输入行数,并从
0
循环到
noline-1
。更惯用的名称选择是
LineCount

您不需要填充
字符
数组。请注意,Memo.Lines已经是一个字符串列表(一种字符数组),并且不需要额外的数组。您不需要填充
字符
数组。请注意,Memo.Lines已经是一个字符串列表(一种字符数组),并且不需要额外的数组。您不需要填充
字符
数组。请注意,Memo.Lines已经是一个字符串列表(一种字符数组),并且不需要额外的数组。您不需要填充
字符
数组。请注意,Memo.Lines已经是一个字符串列表(一种字符数组),不需要额外的数组。谢谢您的帮助!虽然我正在努力练习,但我仍然想知道阵列是否可行。您需要帮助的部分是什么?你知道你没有填充数组,对吗?你知道你的阅读是越界的吗?我问这个问题主要是因为,在我看来,你的代码的主要问题是,你在一大堆代码中混合了很多不同的任务。如果必须使用参差不齐的字符数组,则分解如下:1。函数从T字符串生成不规则数组。2.函数从不规则数组中计数指定字符。3.函数将这些函数组合起来,以提供所需的输出。感谢您的帮助!虽然我正在努力练习,但我仍然想知道阵列是否可行。您需要帮助的部分是什么?你知道你没有填充数组,对吗?你知道你的阅读是越界的吗?我问这个问题主要是因为,在我看来,你的代码的主要问题是,你在一大堆代码中混合了很多不同的任务。如果必须使用参差不齐的字符数组,则分解如下:1。函数从T字符串生成不规则数组。2.函数从不规则数组中计数指定字符。3.函数将这些函数组合起来,以提供所需的输出。感谢您的帮助!虽然我正在努力练习,但我仍然想知道阵列是否可行。您需要帮助的部分是什么?你知道你没有填充数组,对吗?你知道你的阅读是越界的吗?我问这个问题主要是因为,在我看来,你的代码的主要问题是,你在一大堆代码中混合了很多不同的任务。如果必须使用参差不齐的字符数组,则分解如下:1。函数从T字符串生成不规则数组。2.函数从不规则数组中计数指定字符。3.函数将这些函数组合起来,以提供所需的输出。感谢您的帮助!虽然我正在努力练习,但我仍然想知道阵列是否可行。您需要帮助的部分是什么?你知道你没有填充数组,对吗?你知道你的阅读是越界的吗?我问这个问题主要是因为,在我看来,你的代码的主要问题是,你在一大堆代码中混合了很多不同的任务。如果必须使用参差不齐的字符数组,则分解如下:1。函数从T字符串生成不规则数组。2.函数从不规则数组中计数指定字符。3.函数将这些函数组合起来,以提供所需的输出。