procedure TForm1.btn1Click(Sender: TObject); var x: String; ret: string; i: Integer; begin x := '白日依山尽,黄河入海流。欲穷千里目,更上一层楼。'; ret := EmptyStr ; i := 1; while i < Length(x) do begin ret := ret + Format('%4s',[Copy(x, i, 2)]); inc(i, 2); end; lbl1.Caption := ret; end;
吃饭时候正好没事,给你写了几行,凑合看吧 procedure TForm1.Button1Click(Sender: TObject); var Poem: array of array of Char; i, x, y, xCount, yCount: Integer; S: string; begin S := Memo1.Text; //白日依山尽,黄河入海流,欲穷千里目,更上一层楼。 x := 0; y := 0; xCount := 0; yCount := 0; for i := 1 to Length(S) do begin SetLength(Poem, xCount + 1, yCount + 1); Poem[x, y] := S[i]; if S[i] = ',' then begin Inc(x); xCount := x; y := 0; end else begin Inc(y); if y >= yCount then yCount := y + 1; end; end; for y := 0 to yCount do begin S := EmptyStr; for x := xCount downto 0 do S := Format('%s%4s', [S, Poem[x, y]]); Memo2.Lines.Add(S); Memo2.Lines.Add(''); // 空行 end;end;
var
x: String;
ret: string;
i: Integer;
begin
x := '白日依山尽,黄河入海流。欲穷千里目,更上一层楼。';
ret := EmptyStr ;
i := 1;
while i < Length(x) do
begin
ret := ret + Format('%4s',[Copy(x, i, 2)]);
inc(i, 2);
end;
lbl1.Caption := ret;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Poem: array of array of Char;
i, x, y, xCount, yCount: Integer;
S: string;
begin
S := Memo1.Text; //白日依山尽,黄河入海流,欲穷千里目,更上一层楼。
x := 0;
y := 0;
xCount := 0;
yCount := 0;
for i := 1 to Length(S) do
begin
SetLength(Poem, xCount + 1, yCount + 1);
Poem[x, y] := S[i];
if S[i] = ',' then
begin
Inc(x);
xCount := x;
y := 0;
end
else
begin
Inc(y);
if y >= yCount then
yCount := y + 1;
end;
end;
for y := 0 to yCount do
begin
S := EmptyStr;
for x := xCount downto 0 do
S := Format('%s%4s', [S, Poem[x, y]]);
Memo2.Lines.Add(S);
Memo2.Lines.Add(''); // 空行
end;end;
另外也要注意标点符号,必须都是全角。
黄河入海流 。
欲穷千里目 ,
更上一层楼 。而非一行:
白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
改成 String呗Poem: array of array of string;
我在D7下试了下。要有三个地方要改的。看图吧随便说一下,我D7没有帮助了。
但是为啥 Format('%4s', WideChar);
这样的东西会出错捏?