Đề: 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
Post a Comment
» Vui lòng không spam vì nó sẽ bị xóa ngay sau đó.
» Nếu chèn code hãy mã hóa trước khi chèn vào nhận xét.
» Nếu thủ thuật Blog không áp dụng được thì hãy để lại URL blog để mình tiện kiểm tra.