Bài tập Turbo Pascal kiểu xâu - Phần 4

Đề: Nhập vào một xâu từ bàn phím, sau đó đảo ngược vị trí của các chữ trong xâu sau đó in ra màn hình.

#TEST

Input: 'Bui Quoc Khanh'
Output: 'Khanh Quoc Bui'

#Chương trình

PROGRAM string2;
uses crt;
var s,s1: string;
i,vt: integer;

BEGIN
clrscr;
write('Nhap xau s:'); readln(s);
 s:=' '+s;
      vt:=length(s)+1;
      for i:= length(s) downto 1 do
         if (s[i]=' ') and (s[i+1]<> ' ') then
            begin
               s1:=s1+copy(s,i,vt-i);
               vt:=i;
            end;
      delete(s1,1,1);
writeln(s1);
readln;
END.
Ban đầu ta sẽ thêm một dấu cách vào đầu xâu s, gán giá trị cho biến vt (vt:=length(s)+1) - biến vt này dùng để đánh dấu vị trí copy trước đó.
Tiếp theo ta sẽ thực hiện một vòng lặp duyệt từ cuối về đầu xâu, nếu gặp phần tử nào của xâu là một dấu cách (s[i]=' ') và phần tử trước nó không phải là dấu cách (s[i+1]<> ' ') thì ta sẽ copy từ vị trí đó (i) tới vị trí copy trước đó (vt) và cộng vào xâu s1 (s1:=s1+copy(s,i,vt-i)).
Cuối cùng sẽ có một dấu cách bị thừa ở đầu xâu s1 nên ta xóa nó đi cho đẹp (delete(s1,1,1)).

Chương trình này có thể được cải tiến hơn một chút,ban đầu ta vẫn giữ nguyên xâu s và thực hiện một vòng lặp từ cuối xâu tới vị trí xuất hiện dấu cách đầu tiên trong xâu s (pos(' ' ,s)) và tiến hành copy rồi cộng sang xâu s1 như chương trình trên. Sau khi thực hiện xong vòng lặp thì trong xâu s chỉ còn lại một chữ cho nên ta sẽ copy và cộng nó sang xâu s1 luôn. Bên dưới là chương trình:
PROGRAM string2;
uses crt;
var s,s1: string;
i,vt: integer;

BEGIN
clrscr;
write('Nhap xau s:'); readln(s);
vt:=length(s)+1;
      for i:=length(s) downto pos(' ',s) do
         if (s[i]=' ') and (s[i+1]<> ' ') then
            begin
               s1:=s1+copy(s,i,vt-i);
               vt:=i;
            end;
      s1:=s1+' ' + copy(s,1,pos(' ',s)-1);
      delete(s1,1,1);
write(s1);
readln;
END.
Bài này thì mình thực hiện vòng lặp từ cuối về đầu xâu, nhưng bạn cũng có thể thực hiện vòng lặp từ đầu về cuối xâu nhưng sẽ có một vài thay đổi:
Bạn sẽ thêm dấu cách vào cuối xâu, khi cộng vào xâu s1 thì bạn cộng như sau (s1:=copy(s,vt,i-vt)+s1)

Comments