KIỂU CHUỖI KÝ TỰ potx

24 387 0
KIỂU CHUỖI KÝ TỰ potx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

KIỂU CHUỖI TỰ 11.3.1. Chuỗi và khai báo biến chuỗi : Một dãy các 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ó tự nào ‘‘ (chỉ gồ? hai dấu nháy đơn liên tiếp) gọi là chuỗi rỗng. Số 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 gía trị là các hằng chuỗi gọi là biến kiểu chuỗi. Cách khai báo như sau: 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ố 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 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 tự, còn biến Diachi có độ dài tối đa là 255 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ài của chuỗi là số 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 tự, mặc dù khả năng nó có thể chứa tới 17 tự. Tương tự, biến Diachi có độ dài là 29 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 tự thừa sẽ bị bỏ qua. Ví du, nếu gán: St := ‘Quan 1, Thanh pho Ho Chi Minh’; thì gía 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ằ?g độ 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 tự có mã bằng độ dài thực của chuỗi, mỗi byte còn lại chứa một 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à 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ỗikiểu String ). 11.3.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 đó tự thứ i (i=1, 2, , N) của St được hiệu là St[i]. 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 tự St[i] được dùng như một biến kiểu tự, và chuỗi có thể xem là một mảng các tự. Chẳng hạn để in chuỗi ta có thể in từng 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 gía 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. 11.3.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 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 tự của hai chuỗi từ trái qua phải. Nếu phát hiện ra một cặp tự khác nhau thì chuỗi nào chứa 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 tự ở các vị trí tương ứng thì bằng nhau. 11.3.4. Các hàm liên quan đến chuỗi : Hàm Length(St) : cho độ dài của chuỗi St. Ví dụ: Length(‘ABCD’)=4 vì chuỗi ‘ABCD’ có 4 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 qủa bằng 0. Ví dụ: Pos(‘Ab’, ‘cdAb3Abm’) = 3, Pos(‘Ab’, ‘1bA3b’) = 0. Hàm Copy(St, k, m) : cho m 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 qủa sẽ là một chuỗi rỗng Nếu m> số tự đứng sau kể từ vị trí k thì hàm Copy chỉ lấy các 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. 11.3.5. Các thủ tục liên quan đến chuỗi : Thủ tục Delete(St, k, m) : Xóa m 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ì gía trị của St=‘Pascal’ vì 5 tự đầu đã bị xóa. Nếu k > Length(St) thì không xóa gì cả. Nếu m > số 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 3 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 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); [...]... tuan ‘ Chuẩn hóa chuỗi St là xóa hết các tự trắng thừa ở đầu và ở cuối, và giữa hai từ chỉ giữ lại đúng một tự trắng, như St =‘nguyen van tuan’ a) Xóa các tự trắng ở đầu chuỗi : Ðể xóa một tự trắng ở đầu của chuỗi St, ta dùng lệnh: If St[1]=#32 then Delete(St,1,1); Muốn xóa hết các tự trắng ở đầu chuỗi ta dùng lệnh: While St[1]=#32 do Delete(St,1,1); Diễn giải: chừng nào tự đầu tiên của... đầu tiên của St vẫn còn là tự trắng thì cứ xóa nó đi cho đến khi tự đầu tiên là khác trắng Sở dĩ phải dùng vòng lặp While là vì số tự trắng ở đầu chuỗi là không biết trước b) Xóa các tự trắng ở cuối chuỗi : Tương tự, muốn xóa tất cả các tự trắng ở cuối của chuỗi 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à... nó đi cho đến khi ký tự cuối cùng là khác trắng c) Xóa các tự trắng thừa ở giữa hai từ trong chuỗi : Muốn xóa các tự trắng thừa để giữa hai từ chỉ còn đúng một tự trắng ta làm như sau: tìm trong St chỗ nào có hai 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 tự trắng liên tiếp Tức là : k:=Pos(‘ ‘, St); { ‘ ‘ là 2 tự trắng } While k... thành chữ hoa, ta đổi từng 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 tự của chuỗi St ra chữ thường: For i:=1 to Length(St) do if ( St[i]>=‘A’) and (St[i] . KIỂU CHUỖI KÝ TỰ 11.3.1. Chuỗi và khai báo biến chuỗi : 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. 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). ‘12345678’ Chuỗi không có ký tự nào ‘‘ (chỉ gồ? 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’

Ngày đăng: 19/06/2014, 09:20

Tài liệu cùng người dùng

Tài liệu liên quan