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中出现空格的频率。我已将所有字符放在数组中进行练习,但每当我在备注中输入文本和空格时,空格的数量总是返回零。
答案 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
。