在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.函数将这些函数组合起来,以提供所需的输出。