KIỂU CHUỖI KÝ TỰ

Một phần của tài liệu giáo trình tin học đại cương a1 (Trang 192 - 200)

Một dãy các ký tự đặt trong cặp nháy đơn gọi là một hằng chuỗi, hay đơn giản là một chuỗi. Dưới đây là ba chuỗi:

‘Ngon ngu Pascal’

‘Tin hoc 1998’

‘12345678’

Chuỗi không có ký tự nào ‘‘(chỉ gồm hai dấu nháy đơn liên tiếp) gọi là chuỗi rỗng.

Số ký tự có trong chuỗi gọi là độ dài của chuỗi. Chuỗi

‘ABCD’cóđộ dài 4, chuỗi ‘Pascal’có độ dài là 6. Chuỗi rỗng có độ dài bằng không.

Biến nhận giá trị là các hằng chuỗi gọi là biến kiểu chuỗi.

Cách khai báo nhưsau:

196 Var

Tênbiếnchuỗi: String[N]; hoặc:

Tênbiếnchuỗi: String;

trong đó N là một hằng nguyên (0 ≤N ≤255)ấn định số ký tự tối đa mà biến có thể nhận và gọi là độ dài tối đa của biến chuỗi. Nếu không có chỉ thị [N] thì chuỗi có độ dài tối đa là 255 ký tự.

Ví dụ, cho khai báo:

Var

St: String[17];

Diachi: String;

Khiđó St là biến chuỗi có độ dài tối đa là 17 ký tự, còn biến Diachi cóđộ dài tối đa là 255 ký tự.

Cần phân biệt độ dài với độ dài tối đa của biến chuỗi: độ dài tối đa được xác định ngay khi khai báo là khả năng có thể chứa của biến chuỗi, cònđộ dàicủa chuỗi là số ký tự đang thực có trong chuỗi.

Nếu gán:

St:= ‘Nguyen Thi Mai’;

Diachi:= ‘Quan 1, Thanh pho Ho Chi Minh’;

thì biến St có độ dài là 14 ký tự, mặc dù khả năng nó có thể chứa tới 17 ký tự. Tương tự, biến Diachi có độ dài là 29 ký tự cònđộ dài tối đa cho phép là 255.

Khi gán cho biến chuỗi một hằng chuỗi dài hơn độ dài tối đa của nó thì các ký tự thừa sẽ bị bỏ qua.

Ví du, nếu gán:

St:= ‘Quan 1, Thanh pho Ho Chi Minh’;

thì giá trị của biến St sẽ là St=‘Quan 1, Thanh pho’.

Trong bộ nhớ của máy, một biến chuỗi sẽ chiếm một số byte bằng độ dài tối đa của nó cộng thêm 1. Byte đầu tiên, gọi là byte 0, chứa một ký tự có mã bằng độ dài thực của chuỗi, mỗi byte còn lại chứa một ký tự. Cấu trúc của biến St nói trên có dạng:

N g u y e n T h i M a i

Ðộ dài N (=14) của biến St và ký tự trong byte 0 (ký hiệu là St[0]) liên quan với nhau nhưsau:

N = Ord (St[0]) St[0]= Chr(N)

Turbo Pascal có sẵn hàm Length(chuỗi) cho ngay độ dài thực của chuỗi mà không cần phải dùngđến byte 0. Ví dụ:

Length(St)=14.

Chú ý Cũng có thể khai báo chuỗi thông qua việc định nghĩa một kiểu dữ liệu mới bằng từ khóa Type. Chẳng hạn có thể khai báo chuỗi St nói trên theo cách sau:

Type

KStr17= String[17];

Var

St:KStr17;

Khi một biến chuỗi được dùng làm đối số của hàm hay thủ tục thì nó cần phải được khai báo theo cách này (trừ các biến chuỗi có kiểu String).

14.2. Truy nhập vào từng phần tử của chuỗi

Giống như mảng, mỗi phần tử của chuỗi được truy nhập thông qua tên chuỗi 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].

198

Ví dụ, 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à chuỗi có thể xem là một mảng các ký tự. Chẳng hạn để in chuỗi 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 chuỗi là một kiểu dữ liệu có tính cấu trúc.

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

Readln(St);

Write(St);

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

14.3. Các thao tác trên chuỗi + Phép cộng (nối) chuỗi:

Khi cộng hai chuỗi, ta được một chuỗi mới gồm các ký tự của hai chuỗi ban đầu ghép lại.

Ví dụ:

‘tin’+ ‘hoc’=‘tinhoc’

‘1234’+ ‘5678’= ‘12345678’

+ Phép so sánh chuỗi:

Khi so sánh hai chuỗi, ta so sánh từng cặp ký tự của hai chuỗi từ trái qua phải. Nếu phát hiện ra một cặp ký tự khác nhau thì chuỗi nào chứa ký tự nhỏ hơn sẽ nhỏ hơn.

Ví dụ:

‘Hong’> ‘Han’vì ‘o’> ‘a’

‘thanh’> ‘thao’vì ‘n’> ‘o’

Nếu so sánh hết chiều dài của chuỗi ngắn hơn mà không có cặp nào khác nhau thì chuỗi ngắn hơn sẽ nhỏ hơn.

Ví dụ:

‘an’< ‘anh’

‘chu’< ‘chung’

Hai chuỗi bằng nhau khi chúng cùng độ dài và các ký tự ở các vị trí tươngứng thì bằng nhau.

14.4. Các hàm liên quanđến chuỗi

+ HàmLength(St): chođộ dài của chuỗi St.

Ví dụ

Length(‘ABCD’)=4 vì chuỗi ‘ABCD’có 4 ký tự.

Chuỗi rỗng có độ dài bằng 0.

+ Hàm Pos(S, St)

Cho vị trí đầu tiên tìm thấy chuỗi S trong chuỗi St, nếu không tìm thấy thì hàm cho kết quả bằng 0.

Ví dụ

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

+ HàmCopy(St, k, m): cho m ký tự của St tính từ vị trí k.

Ví dụ

Copy (‘ABCDEF’, 4, 2) =‘DE’.

Nếu k> Length(St) thì kết quả sẽ là một chuỗi rỗng.

200

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 chuỗi St1, St2, ..., Stn theo thứ tự đó thành một chuỗi duy nhất. Vậy:

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

14.5. Các thủ tục liên quanđến chuỗi + Thủ tục Delete(St, k, m)

Xóa m ký tự trong biến chuỗi St bắt đầu từ vị trí thứ k. Ví dụ, sau khi thực hiện các lệnh:

St:=‘TurboPascal’;

Delete(St, 1, 5);

thì giá trị của St=‘Pascal’vì năm 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 chuỗi.

Ví dụ, 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 ba ký tự cuối nên chỉ còn St=‘Turbo Pas’.

+ Thủ tục Insert(S, St, k)

Chèn chuỗi S vào biến chuỗi St tại vị trí k. Ví dụ, cho:

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 chuỗi và gán cho biến chuỗi St.

Ví dụ, sau khi thực hiện lệnh:

Str(4752, St);

thì kết quả 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 quả 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 quả St=‘34.950’(trước số 34.950 có 1 ký tự trắng) .

+ Thủ tục Val(St, x, k)

Biến đổi chuỗi 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 chuỗi St.

Ví dụ, 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:

202

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 chuỗi St, tại đó không đổi ra số được.

14.6. Các ví dụ về chuỗi

+Ví dụ 14_1:Ðổi một chuỗi ra chữ hoa hay chữ thường.

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

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

Tương tự, để đổi cả chuỗi St thành chữ thường, ta cũng đổi từng ký tự của chuỗi 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ụ 14_2:Chuẩn hóa một chuỗi ký tự .

Cho chuỗi 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 chuỗi St là xóa hết các ký tự trắngthừ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 chuỗi

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

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

Một phần của tài liệu giáo trình tin học đại cương a1 (Trang 192 - 200)

Tải bản đầy đủ (PDF)

(284 trang)