PDA

View Full Version : Bài tập hay về xâu nè !!



ndvd1992
20-12-2009, 14:38
Nhập vào họ và tên của 1 người bất kì . xuất ra màn hình họ và tên đúng của người đó .... Đề hay mau vào mà giải ^^
Vdụ: nhập vào ' nguyen van anh tuan '
xuất ra 'nguyen van anh tuan'

Nào cùng giải nào ^^

bài tập hay thế này mà chưa ai giải hay ghé thăm à , bùn ghê :(

nhokdragon94
21-12-2009, 18:01
Ai làm đc làm giùm pác chứ em nhìn cái tình hình này hem nổi rùi. Hic nhìn mà chả ra thuật toán j` cả.
Pác làm đc hem :)

1024KB
21-12-2009, 19:01
Cái này là xóa ký tự trắng bên trái và phải của chuỗi


s:=' nguyen anh tuan ';
while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,lengh(s),1);

ndvd1992
21-12-2009, 20:54
tại ở đây không cách nhiều khoảng trống nên mình ko biểu diễn được
chứ thực ra không chỉ có 1 dấu cách ở đầu và cuối mà còn nhiều dấu cách ở giữa các từ bạn àk
xóa sao cho còn 1 dấu + với việc nếu từ đó không cách ra thì mình phải thêm cho nó 1 dấu cách nữa .


P/S : mấy bạn giải đi thứ 5 mình sẽ post bài giải của mình ^^

linhhahaduc
22-12-2009, 00:10
while s[1] = '_' do delete(s,1,1);
while s[length(s)] = '_' do delete(s,length(s),1);
while pos('__',s) > 0 do delete(s,pos('__',s),1);

( P/s : thay "_" = dấu cách nhé. Còn việc thêm dấu cách thì mình chịu . Ko biết thêm chỗ nào :)) )

bara_dh
20-02-2010, 20:08
uses crt;
var xau:string;
i:integer;
begin
clrscr;
write('Nhap ten: ');readln(xau);
while xau[1]=' ' do delete(xau,1,1);
while xau[length(xau)]=' ' do delete(xau,length(xau),1);
i:=1;
while i<=n do
if (xau[i]=' ') and (xau[i+1]=' ') do delete(cau,i,1)
else i:=i+1;
write('Ten dang chuan la: ',xau);
readln
end.

tuanrint
26-02-2010, 12:07
Em vẫn chưa hiểu đề bài lắm các anh giải thích them đi.

hamj
28-02-2010, 21:09
cách ngắn nhất đây:
while s[1]=' ' then delete(s,1,1);
while s[length(s)]=' ' then delete(s,length(s)-1,1);
for i:=length(s) downto 2 do
if (s[i]=' ') and (s[i-1]=' ') then delete(s,i-1,1);

nirvanat
01-03-2010, 19:45
Cái đó chắc là chuẩn hóa 1 chuỗi kí tự... đầu tiên pác dùng 2 vòng 2 (0 nằm trong nhau nha) để xóa các kí tự trắng ở đầu và cuối xâu. sau đó dùng hàm pos để xóa 1 kí tự trắng nếu có 2 kí tự trắng liên tiếp.. Đơn giản vậy thôi
Thế này nha... mình chỉ vik phần chính thui


while s[i]=' ' do
delete(s,1,1);
while s[length(s)]=' ' do
delete(s,length(s),1);
i:=pos(' ',s);{2 kí tự trắng liên tiếp}
while i<>0 do
begin
delete(s,i,1);
i:=pos(' ',s);
end;

Mình nghĩ dùng vòng lặp repeat sẽ tốt hơn :)