Trường Đại học Điện lực Tập đoàn Điện lực Việt Nam


Truy nhập vào từng phần tử của xâu



tải về 1.67 Mb.
trang35/48
Chuyển đổi dữ liệu18.07.2016
Kích1.67 Mb.
#1821
1   ...   31   32   33   34   35   36   37   38   ...   48

7.2.5 Truy nhập vào từng phần tử của xâu


Giống như mảng, mỗi phần tử của xâu được truy nhập thông qua tên xâu và chỉ số của phần tử.

Gọi N =Length(St), khi đó ký tự thứ i (i=1, 2, ..., N) của St được ký hiệu là St[i].



Ví dụ 7.26: cho : St :=‘ABC’;

thì N=3 và St[1]=‘A’, St[2]=‘B’, St[3]=‘C’.

Lệnh St[1]:=‘a’; sẽ biến đổi St thành St=‘aBC’.

Như vậy mỗi ký tự St[i] được dùng như một biến kiểu ký tự, và xâu có thể xem là một mảng các ký tự. Chẳng hạn để in xâu ta có thể in từng ký tự như sau:

For i:=1 to Length(St) do write(St[i]);

Điều này cho thấy xâu là một kiểu dữ liệu có tính cấu trúc.

Nhưng mặt khác, mỗi xâu lại có thể xem là một giá trị duy nhất, vì có thể nhập và in xâu trực tiếp bằng các lệnh:

Readln(St);

Write(St);

Đặc điểm này cho thấy xâu còn là một kiểu dữ liệu có tính đơn giản.


7.2.6 Các hàm xử lý xâu ký tự


  • Hàm Length(St): cho kết quả là một số nguyên bằng độ dài của xâu St.

Ví dụ 7.27: Length(‘ABCD’)=4 vì xâu ‘ABCD’ có 4 ký tự.

Xâu rỗng có độ dài bằng 0.




  • Hàm Pos(S, St): Cho vị trí đầu tiên tìm thấy xâu S trong xâu St, nếu không tìm thấy thì hàm cho kết qủa bằng 0.

Ví dụ 7.28:

Pos(‘Ab’, ‘cdAb3Abm’) = 3,

Pos(‘Ab’, ‘1bA3b’) = 0.


  • Hàm Copy(St, k, m) : kết quả trả lại là một xâu gồm m ký tự liên tiếp của St tính từ vị trí k.

Ví dụ 7.29: Copy (‘ABCDEF’, 4, 2) =‘DE’.

- Nếu k> Length(St) thì kết qủa sẽ là một xâu rỗng

- Nếu m> số ký tự đứng sau kể từ vị trí k thì hàm Copy chỉ lấy các ký tự từ vị trí k đến hết chiều dài của St, ví dụ :

Copy (‘ABCD’, 3, 10) = ‘CD’




  • Hàm Concat( St1, St2, ..., Stn) : Ghép nối các xâu St1, St2, ..., Stn theo thứ tự đó thành một xâu duy nhất. Vậy :

Concat( St1, St2, ..., Stn) = St1+St2+...+Stn.

Ví dụ 7.30: st1:= ‘C5 ’; st2:= ‘Cong Nghe ’; st3 := ‘Tu Dong’

St := concat(st1,st2,st3);

Thì st = ‘C5 Cong Nghe Tu Dong’

7.2.7 Các thủ tục liên quan đến xâu


  • Thủ tục Delete(St, k, m) : Xóa m ký tự trong biến xâu St bắt đầu từ vị trí thứ k. Ví dụ, sau khi thực hiện các lệnh:

Ví dụ 7.31: St:=‘ TurboPascal’;

Delete(St, 1, 5); {xóa đi 5 ký tự trong xâu st tính từ ký tự đầu tiên}

thì giá trị của St=‘Pascal’ vì 5 ký tự đầu đã bị xóa.

- Nếu k > Length(St) thì không xóa gì cả.

- Nếu m > số ký tự đứng sau kể từ vị trí k thì xóa hết từ vị trí k đến cuối xâu.

Ví dụ 7.32: Sau khi thực hiện ba lệnh :

St:=‘Turbo Pascal’;

Delete(St, 10, 20);

Write(St);

thì in ra chữ Turbo Pas vì St đã bị xóa đi 3 ký tự cuối nên chỉ còn St=‘Turbo Pas’.


  • Thủ tục Insert(S, St, k) : Chèn xâu S vào biến xâu St tại vị trí k.

Ví dụ 7.33: St:=‘ABCD’;

Sau khi thực hiện lệnh:

Insert(‘**’, St, 3);

thì St bị biến đổi thành St=‘AB**CD’.

- Nếu k> Length(St) thì S được nối vào cuối của St. Ví dụ, sau khi thực hiện hai lệnh:

St:=‘XYZ’;

Insert(‘ABC’, St, 6);

thì St=‘XYZABC’.




  • Thủ tục Str(x, St): Biến đổi số nguyên hay thực x thành kiểu xâu và gán cho biến xâu St.

Ví dụ 7.34: Sau khi thực hiện lệnh :

Str(4752, St);

thì kết qủa là St= ‘4752’.

Số x có thể được định dạng như khi in ra màn hình.

Lệnh Str(4752 : 6, St);

cho kết qủa St=‘ 4752’ (trước số 4752 có 2 ký tự trắng) .

- Nếu x là biến thực và giá trị của x=34.95 thì lệnh :

Str(x :7:3, St);

cho kết qủa St=‘ 34.950’ (trước số 34.950 có 1 ký tự trắng) .


  • Thủ tục Val(St, x, k ): Biến đổi xâu số St thành số nguyên hay thực và gán cho biến nguyên hay thực x. Số nguyên k dùng để phát hiện lỗi: nếu đổi được thì k=0, ngược lại, giá trị của k là vị trí có lỗi trong xâu St.

Ví dụ 7.35: cho ba biến n, k, j kiểu nguyên và biến x kiểu thực, sau khi thực hiện các lệnh

St:=‘385’;

Val(St,n,j);

Val(‘12.59’,x,k);


thì n=385, j=0, x=12.59 và k=0.

Nếu gán St := ‘3a7’; và thực hiện lệnh: Val(St,n,k);

thì giá trị của n không xác định còn k=2 là vị trí của chữ a trong xâu St, tại đó không đổi ra số được.

7.2.8 Các ví dụ về xâu


Ví dụ 7.36: Đổi một xâu ra chữ hoa hay chữ thường.

Để đổi cả xâu St thành chữ hoa, ta đổi từng ký tự của xâu đó ra chữ hoa, tức là :

For i:=1 to Length(St) do

St[i]:=Upcase(St[i]);

Tương tự, để đổi cả xâu St thành chữ thường, ta cũng đổi từng ký tự của xâu St ra chữ thường:

For i:=1 to Length(St) do

if ( St[i]>=‘A’) and (St[i]<=‘Z’) then

St[i]:=Chr( Ord(St[i]) + 32) ;


Ví dụ 7.37: Chuẩn hóa một xâu ký tự .

Cho xâu St có nhiều ký tự trắng thừa ở đầu, ở cuối và giữa các từ, như St=‘ nguyen van tuan ‘. Chuẩn hóa xâu St là xóa hết các ký tự trắng thừa ở đầu và ở cuối, và giữa hai từ chỉ giữ lại đúng một ký tự trắng, như St =‘nguyen van tuan’.


a) Xóa các ký tự trắng ở đầu xâu :

Để xóa một ký tự trắng ở đầu của xâu St, ta dùng lệnh:

If St[1]=#32 then Delete(St,1,1);

Muốn xóa hết các ký tự trắng ở đầu xâu ta dùng lệnh:

While St[1]=#32 do Delete(St,1,1);

Diễn giải: chừng nào ký tự đầu tiên của St vẫn còn là ký tự trắng thì cứ xóa nó đi cho đến khi ký tự đầu tiên là khác trắng.

Sở dĩ phải dùng vòng lặp While là vì số ký tự trắng ở đầu xâu là không biết trước.


b) Xóa các ký tự trắng ở cuối xâu :

Tương tự, muốn xóa tất cả các ký tự trắng ở cuối của xâu St, ta dùng lệnh:

While St[ length(St) ]= #32 do Delete(St, length(St), 1);

Diễn giải: chừng nào ký tự cuối cùng của St còn là khoảng trắng thì cứ xóa nó đi cho đến khi ký tự cuối cùng là khác trắng.


c) Xóa các ký tự trắng thừa ở giữa hai từ trong xâu :

Muốn xóa các ký tự trắng thừa để giữa hai từ chỉ còn đúng một ký tự trắng ta làm như sau: tìm trong St chỗ nào có hai ký tự trắng thì xóa đi một, và lặp lại thao tác trên cho đến khi trong St không còn chỗ nào có hai ký tự trắng liên tiếp. Tức là :

k:=Pos(‘ ‘, St); { ‘ ‘ là 2 ký tự trắng }

While k > 0 do

begin

Delete(St, k, 1);



k:=Pos(‘ ‘, St);

end;
Ví dụ 7.38 : đếm trong xâu St có bao nhiêu chữ pascal.

Vì chữ pascal có 6 ký tự, nên ta so sánh từng cụm 6 ký tự của St với xâu pascal, bắt đầu từ vị trí 1:

Dem:=0;


For i:=1 to Length(St) do

if Copy (St, i, 6) =‘pascal’ then

Inc(Dem);

Writeln(‘ Số chữ pascal là ‘ , Dem);


Ví dụ 7.39: Tìm kiếm và thay thế.

Tìm trong xâu St xem có chứa chữ ‘basic’ không, nếu có thì thay bằng chữ ‘pascal’, nếu không có thì in câu ‘không có’. Ví dụ St=‘ngon ngu basic duoc dung pho bien’, sau khi thay thế ta được St = ‘ngon ngu pascal duoc dung pho bien’.

Ta dùng hàm Pos để tìm xem trong St có chứa chữ ‘basic’ không. Thủ tục Delete sẽ xóa xâu ‘basic’ khỏi St, và thủ tục Insert sẽ chèn xâu ‘pascal’ vào St tại vị trí đang xét:

k:= Pos(‘basic’ , St);

while k> 0 do

begin


Delete(St, k, 5); { xóa chữ basic }

Insert(‘pascal’ , St, k); { chèn chữ pascal }

k:= Pos(‘basic’ , St);

end;
Ví dụ 7.40: Tính tổng các bình phương của các chữ số của một số tự nhiên N.

Ví dụ N= 325 thì T=32+22+52 = 38.

Str(N,St); { Đổi số N ra xâu gán vào St }

T:=0;

For i:=1 to Length(St) do



begin

Val(St[i],j,k); {Đổi St[i] ra số gán vào j}

T:=T+ j*j;

end;


Ví dụ 7.41: Tách mỗi từ của xâu in riêng trên một dòng:

Cho St=‘ ngon ngu pascal ‘, cần in ra :

ngon

ngu


pascal

Phương pháp:

Bước 1: - Chuẩn hóa xâu St thành St=‘ngon ngu pascal’.

- Thêm một ký tự trắng vào cuối để St=‘ngon ngu pascal ‘.

Bước 2: -Tìm k là vị trí của ký tự trắng đầu tiên, in k-1 ký tự đầu tiên, đó chính là từ thứ nhất, xóa k ký tự đầu tiên, kết qủa St=‘ngu pascal ‘.

Lặp lại qúa trình trên cho đến khi trong St không còn ký tự trắng nào nữa.

Chương trình cụ thể như sau:


St:=St + #32; { thêm 1 ký tự trắng vào cuối St}

k:=Pos(#32, St);

While k>0 do

begin


Tu:=Copy(St, 1, k-1);

Writeln(Tu);

Delete(St, 1, k);

k:=Pos(#32, St);

end;


Каталог: images
images -> Hướng dẫn sử dụng Dropbox Để sử dụng được Dropbox
images -> BÀi thuyết trình cách xáC ĐỊnh và chế ĐỘ pháp lý CỦa các vùng biển theo công ưỚc của liên hiệp quốc về luật biển năM 19821
images -> Céng hßa x· héi chñ nghÜa viÖt nam Độc lập tự do hạnh phúc
images -> Lúa gạo Việt Nam Giới thiệu
images -> Trung Tâm kt tc-đl-cl
images -> Số: 105/2008/QĐ-ttg CỘng hòa xã HỘi chủ nghĩa việt nam độc lập Tự do Hạnh phúc
images -> ChuyêN ĐỀ ĐẠi số TỔ HỢP, XÁc suất kiến thức cơ bản Đại số tổ hợp
images -> BỘ giáo dục và ĐÀo tạo trưỜng đẠi học luật tp. HỒ chí minh dưƠng kim thế nguyên thủ TỤc phá SẢn các tổ chức tín dụng theo pháp luật việt nam
images -> Review of Condor, Sun Grid Engine and pbs

tải về 1.67 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   31   32   33   34   35   36   37   38   ...   48




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương