PDA

View Full Version : Giúp mình bài xâu ký tự này!



Takashio
22-07-2009, 14:18
Hãy viết thủ tục tách họ và tên
vd: Nguyễn Văn An
=> Họ: Nguyễn Văn
Tên: An

*Giúp mình với, mình đang cần gấp*

hang_vt
22-07-2009, 14:31
uses crt;

var s,ho,ten,c:string;
dai,i:byte;

begin
write('NHAP HO VA TEN : ');
readln(s);
dai:=length(s);
i:=dai;
repeat
dec(i);
c:=s[i];
until (c=' ') or (i=0);
if i<>0 then
begin
ho:=copy(s,1,i-1);
ten:=copy(s,i+1,dai+1-i);
writeln('Ho :',ho);
writeln('Ten :',ten);
end;
readln
end.

lehang_gb1
22-07-2009, 14:42
Đơn giản thôi bạn ah!
Xâu coi như nhập vào đac chuẩn hóa
1. Tìm vị trí dấu cách từ cuối xâu ta tìm được là l
2. Sao chép từ vị trí dấu cách cuối cùng trong xâu l+1 đến cuối xâu length(S) -l là ta tách được tên
3. Sao chép từ đầu xâu đến dấu cách cuối cùng trong xâu tức là l, sao chép l-1 kí tự.
VD: NGuyễn Văn An
1. Duyệt từ cuối xâu tìm dấu cách đầu tiên ở vị trí 11
2. copy(S,11+1,length(S)-11) {Tách tên}
3. copy(S,1,11-1){tách họ và đệm}


Var s,st1,st2:string;
procedure tach(S:string);
Var i,l:integer;
Begin
l:=length(S);
While (S[l]<>' ') do l:=l-1;{hay dec(l)} {Tim vi tri dau cah tu cuoi xau de tach ten}
st1:=copy(S,1,l-1);
St2:=copy(S,l+1,length(S)-l);
end;
Begin
Write('Nhap vao xau:');Readln(S);
tach(S);writeln(st1);
Writeln(st2);
Readln
End.

quangtq
22-07-2009, 17:35
P/S: Thêm cái đoạn chuẩn hóa trước đấy. Nếu mà nhập (_ thể hiện dấu space)
___Nguyễn _Văn ___An___ thì phải xóa đi
Tuy nhiên cái này chỉ để in ra cho nó đẹp
Hoặc dùng trong sắp xếp
Chứ nếu chỉ cần hiện ra thì như chị hang_vt và lehang là được rồi.