3

こんにちは、行が空行になるまで、指定されたテキストの文字を改行のみでカウントする単純なプログラムを取得しました

var
  znaki: array['a'..'z'] of integer = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  napis: String;
  maly: String;
  dlugosc: Integer;
  znak: char;


begin
napis := 'a';
while napis[1] <> '#13#10'do
begin
  readln(napis);
  maly:=LowerCase(napis);
  for dlugosc:=(length(maly)) downto 1 do
begin
znaki[maly[dlugosc]]:=znaki[maly[dlugosc]]+1;
  end;
  for znak:='a' to 'z' do
    writeln(znak, ' ', znaki[znak]);
  end;

end.  

条件が満たされている間は失敗しますが、その理由はわかりません。手がかりをください

4

2 に答える 2

2

#10改行です

#13キャリッジリターンです(つまり、行頭に移動します)

#10 だけを確認する必要があります。

于 2012-05-15T10:16:06.983 に答える
2

1 char、napis[ 1 ]; #13#10の 2 文字にすることはできません...

したがって、たとえば次のようにします。

var
  znaki: array['a'..'z'] of integer = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  napis: String;
  maly: String;
  dlugosc: Integer;
  znak: char;


begin
napis := 'a';
while ((Length(napis) > 0)) do
begin
  readln(napis);
//  napis := StringReplace(napis, #13#10, #10, [rfReplaceAll]);  //useless for a console readln
  maly:=LowerCase(napis);
  for dlugosc:=(length(maly)) downto 1 do
  begin
    znaki[maly[dlugosc]]:=znaki[maly[dlugosc]]+1;
  end;
  for znak:='a' to 'z' do
    writeln(znak, ' ', znaki[znak]);
end;
end.
于 2012-05-15T10:11:23.377 に答える