So sánh xâu trong Pascal
1. ĐỊNH NGHĨA XÂU KÍ TỰ (STRING)
Khi Niklaus Wirth thiết kế Pascal, tác giả đã sử dụng máy tính lớn với các thiết bị nhớ và ngoại vi như bìa đục lỗ, băng từ trong đó các dữ liệu có độ dài cố định được sử dụng. Với sự phát triển của kĩ thuật, các phương trình dịch Pascal hiện nay đã có một kiểu dữ liệu mới là xâu kí tự để xử lí các chuỗi, các dãy kí tự có độ dài thay đổi... nhằm đáp ứng nhu cầu xử lí văn bản, xử lí từ (ngữ). Một xâu kí tự được định nghĩa bằng từ khóa STRING, theo sau là các số kí tự cực đại có thể có của xâu kí tự, được đặt trong ngoặc vuông.
STRING[DO_DAI_CUC_DAI] ;
+ Ví dụ:
VAR
Filename: String[20] ;
Line: String[80] ; {Dòng 80 kí tự là nhiều nhất}
Cấu trúc của xâu kí tự như sau: Trong bộ nhớ nó chiếm số byte bằng số kí tự cực đại để chứa các kí tự, cộng với 1 byte đầu tiên chứa số kí tự hiện có của xâu kí tự.
Ví dụ: biến Filename khai báo ở trên được gán giá trị:
Filename:= 'VIDU.PAS' ;
Khi này độ dài xâu kí tự Filename chi là 8 kí tự, mặc dù độ cực đại cho phép của Filename là 20. Như đã trình bày ở trên, byte đầu tiên chứa 1 kí tự để biểu diễn độ đài xâu kí tự (số thứ tự trong bảng mã ASCII của kí tự là độ dài xâu). Vì độ dài xâu kí tự được biểu diễn bằng 1 byte nên ta thấy ngay rằng độ dài xâu kí tự chỉ nằm trong khoảng từ 1 đến 255. Byte đầu tiên có thể truy nhập vào qua chỉ số 0. Vì vậy độ dài thực của xâu kí tự có thể tìm ra như sau:
Dodai = Ord(Filenamer[0]) ;
hoặc nếu biết độ dài xâu kí tự. ta có thể tìm ra kí tự biểu diễn độ dài:
Filename[0]:= Char[Dodai] ;
Khi độ dài cực đại của chuỗi là 255 ta có thế khai báo đơn giản STRING thay vì STRING[255].
Hàm chuẩn Length[St] cho ta độ dài của xâu kí tự St. Một xâu chữ có thế là rỗng (không chứa kí tự nào) và khi đó Lenght(St) = 0. Xâu kí tự rỗng được kí hiệu .
Chúng ta có thể hiểu String như là một mảng kí tự có chỉ số chạy từ 0 đến độ dài cực đại, phần tử thứ 0 chứa độ dài thực của xâu. Song mảng kí tự có độ dài luôn luôn không đổi. Vì vậy khi ta đọc cả mảng hay viết ra cả mảng kí tự sẽ có những cái bất tiện do độ dài xâu kí tự không thay đổi được. Chúng ta sẽ thấy vai trò ứng dụng to lớn của String trong suốt quá trình lập trình. Còn mảng kí tự ít được dùng hơn String.
Truy nhập vào phần tử của xâu kí tự.
Ta có thể truy nhập vào từng kí tự một của xâu kí tự với tên biến và chữ số đặt trong ngoặc vuông như khi truy nhập vào phần tử của mảng. Chỉ số này có thể chạy từ 1 tới độ dài cực đại của xâu kí tự.
Nếu vị trí kí tự đó nằm ngoài độ dài thực của xâu kí tự thì phần từ đó của xâu không có giá trị xác định. Vì vậy khi truy nhập vào từng phần tử của xâu chữ ta còn cần phải kiểm tra xem vị trí đó có nằm trong khoảng độ dài thực của xâu hay không.
2. CÁC THAO TÁC TRÊN XÂU KÍ TỰ
a) Phép cộng xâu:
Xâu kí tự có thể được sử dụng như là các toán hạng trong các biểu thức để ghép xâu kí tự qua toán tử +.
Ví dụ:
Filename:= 'A\' + Filename ;
Cho kết quả Filename = 'A\VIDU.PAS'
Hoặc Filename:= 'Ten' + File' + Pas ;
Cho kết quả Filename = 'TenFile.Pas'
Rõ ràng là với kiểu mảng kí tự, chúng ta không thể thực hiện được phép cộng để ghép hai mảng lại với nhau vì độ dài của chúng đã cố định.
Không có tính trừ, nhân, chia... cho xâu kí tự.
b) So sánh xâu kí tự:
Xâu kí tự có thể được dùng trong các biểu thức quan hệ để so sánh:
- Khi so sánh hai xâu kí tự, các kí tự của hai xâu được so sánh từng cặp một từ trái qua phải theo giá trị của bảng mã ASCII.
- Nếu hai xâu có độ dài khác nhau song số kí tự giống nhau đến độ dài xâu ngắn nhất thì xâu có độ dài ngắn hơn được coi là bé hơn.
'FILENAME' < 'FILENAME A': cho giá trị TRUE.
'FILENAME' < 'FILENAME': cho giá trị FALSE.
- Hai xâu kí tự bằng nhau nếu như cả hai về nội dung lẫn độ dài của chúng là giống nhau.
'FILENAME' = FILENAME' là biểu thức có giá trị TRUE.
c) Khai báo STRING làm tham số CTC:
Tương tự như ARRAY, STRING có thể dùng làm tham số cho chương trình con. Ta phải khai báo kiểu dữ liệu trước khi sử dụng nó.
Ví dụ:
FUNCTION VIDUSAI: STRING[30]
PROCEDURE VIDUSAI (ST: STRING[50]) ;
Ta cần phải viết như sau:
TYPE
ST30 = STRING[30] ;
ST50 = STRING[50] ;
VAR
CHUOI: ST30
CHUOI: ST50 ;
FUNCTION VIDU1: ST30 ;
PROCEDURE VIDU2: (ST: ST50) ;
Khi dùng String làm tham số cho CTC, về nguyên tắc độ dài của tham số thực phải bàng độ dài của tham số hình thức, nghĩa là Turbo Pascal kiểm tra độ dài xâu giữa các tham số (Range Checking). Vì vậy lời gọi thủ tục sau là đúng hoàn toàn:
VI DU2 (CHUOI50) ;
Đó là vì CHUOI50 (tham số thực sự) có kiểu là ST50 trùng với tham số hình thức ST: ST50.
Lời gọi thủ tục VIDU2 (CHUOI30) ; sẽ bị coi là không hợp lệ vì chuỗi CHUOI30 có kiểu là ST30.
Tuy vậy bạn có thể hoàn toàn chuyển tham số STRING có độ dài khác và CTC bằng cách hướng dẫn chương trình dịch Turbo Pascal không kiểm tra tính tương thích về độ dài. Cách làm: định hướng |$V-| sẽ bỏ việc kiểm tra tính tương thích về độ dài của tham số xâu kí tự và {$V+} sẽ làm hoạt động việc kiểm tra trở lại.
d) Viết ra màn hình:
Có thể dùng Write(St) và Writeln(St) cho 1 xâu kí tự St.
e) Đọc:
Readln (St) sẽ đọc các kí tự cho xâu St với độ dài thực là số kí tự gõ vào từ bàn phím. Nếu ta gõ Return luôn, không cho kí tự nào thì St rỗng (St = ' '), nếu ta gõ vào nhiều hơn số kí tự tối đa của St thì các kí tự cuôi dư ra sẽ bị bỏ qua.
f) Các thủ tục và hàm chuẩn xử lí xâu kí tự:
Do xâu kí tự được dùng rất phổ biến nên Turbo Pascal đã đưa vào một số thủ tục và hàm để xử lí xâu kí tự. Độ dài xâu là 255 được sử dụng để minh họa.
Hàm Lenght (St) cho ta độ dài thực sự của xâu kí tự St.
Ta có thể tự viết lại hàm Lenght (St) như sau:
FUNCTION LENGHT (St: STRING): BYTE ;
Begin
Lenght:= Ord(St[0]) ;
End ;
Ví dụ:
Với St:= 'FILENAME' thì Lenght(St) có giá trị bằng 8.
Thủ tục xóa Delete( St, Vi_tri, S1) sẽ xóa bỏ trong xâu St một số kí tự S1 kể từ vị trí Vi_tri.
Ví dụ:
Với St:= 'FILENAME' thì sau khi gọi Delete(St, 2, 3) St sẽ có giá trị bằng 'FNAME' vì xóa đi 3 kí tự 'ILE'.
Nếu Vi_tri + SI > Lenght(St) thì chỉ xóa những kí tự cuối của nó tính từ Vi_tri.
Ví dụ:
Với St:= 'FILENAME' thì sau khi gọi Insert ('TEST', St, 5) St sẽ có giá trị bằng 'FILETESTNAME'.
Nếu Lenght (S1) + Lenght (St) vượt quá độ đài cực đại của St thì các kí tự nằm trong độ dài cực đại mới được giữ lại.
Nếu Vi_tri > Lenght (St) thì SI sẽ được nối vào đuôi của St.
Thủ tục St (GiaTri, St) sẽ biến đổi giá trị bằng sô nguyên hoặc thực hành một chuỗi kí tự biểu diễn số đó.
Ví dụ: với I = 234,
Str (I: 5, St) sẽ cho St = 234(*5 kí tự*).
Thủ tục Val(St, GiaTri, Maloi) sẽ biến đổi một xâu kí tự St thành một số nguyên hoặc thực chứa kết quả trong Giatri. Maloi dùng để phát hiện lỗi: nếu St chứa chuỗi kí tự tương ứng với một số thì Maloi có giá trị 0. Ngược lại, Maloi sẽ mang giá trị là vị tri của kí tự đầu tiên sai trong St.
Ví dụ: St = '123.456', X là biến thực, Er là biến nguyên.
Val(St, X, Er) cho ta X = 123.456 và Er = 0.
Nếu I là biến nguyên
Val(St, X, Er) cho ta I = 0 và Er = 4.
Nếu St = '23.456
Val(St, X, Er) cho ta X = 0 và Er = 3.
Hàm Copy(St, Vi_tri, Kt) sẽ nhập kí tự trong St bắt đầu từ vị trí Vi_tri.
Ví dụ: St =:='123456789';
St1:= Copy(St, 4, 3) ; sẽ cho St1= '456'.
Hàm ghép Concat(St1, St2,, Stn) sẽ ghép nối tất cả các chuỗi St1, St2, Stn thành một xâu kí tự tương tự ghép +.
Khi Niklaus Wirth thiết kế Pascal, tác giả đã sử dụng máy tính lớn với các thiết bị nhớ và ngoại vi như bìa đục lỗ, băng từ trong đó các dữ liệu có độ dài cố định được sử dụng. Với sự phát triển của kĩ thuật, các phương trình dịch Pascal hiện nay đã có một kiểu dữ liệu mới là xâu kí tự để xử lí các chuỗi, các dãy kí tự có độ dài thay đổi... nhằm đáp ứng nhu cầu xử lí văn bản, xử lí từ (ngữ). Một xâu kí tự được định nghĩa bằng từ khóa STRING, theo sau là các số kí tự cực đại có thể có của xâu kí tự, được đặt trong ngoặc vuông.
STRING[DO_DAI_CUC_DAI] ;
+ Ví dụ:
VAR
Filename: String[20] ;
Line: String[80] ; {Dòng 80 kí tự là nhiều nhất}
Cấu trúc của xâu kí tự như sau: Trong bộ nhớ nó chiếm số byte bằng số kí tự cực đại để chứa các kí tự, cộng với 1 byte đầu tiên chứa số kí tự hiện có của xâu kí tự.
Ví dụ: biến Filename khai báo ở trên được gán giá trị:
Filename:= 'VIDU.PAS' ;
Khi này độ dài xâu kí tự Filename chi là 8 kí tự, mặc dù độ cực đại cho phép của Filename là 20. Như đã trình bày ở trên, byte đầu tiên chứa 1 kí tự để biểu diễn độ đài xâu kí tự (số thứ tự trong bảng mã ASCII của kí tự là độ dài xâu). Vì độ dài xâu kí tự được biểu diễn bằng 1 byte nên ta thấy ngay rằng độ dài xâu kí tự chỉ nằm trong khoảng từ 1 đến 255. Byte đầu tiên có thể truy nhập vào qua chỉ số 0. Vì vậy độ dài thực của xâu kí tự có thể tìm ra như sau:
Dodai = Ord(Filenamer[0]) ;
hoặc nếu biết độ dài xâu kí tự. ta có thể tìm ra kí tự biểu diễn độ dài:
Filename[0]:= Char[Dodai] ;
Khi độ dài cực đại của chuỗi là 255 ta có thế khai báo đơn giản STRING thay vì STRING[255].
Hàm chuẩn Length[St] cho ta độ dài của xâu kí tự St. Một xâu chữ có thế là rỗng (không chứa kí tự nào) và khi đó Lenght(St) = 0. Xâu kí tự rỗng được kí hiệu .
Chúng ta có thể hiểu String như là một mảng kí tự có chỉ số chạy từ 0 đến độ dài cực đại, phần tử thứ 0 chứa độ dài thực của xâu. Song mảng kí tự có độ dài luôn luôn không đổi. Vì vậy khi ta đọc cả mảng hay viết ra cả mảng kí tự sẽ có những cái bất tiện do độ dài xâu kí tự không thay đổi được. Chúng ta sẽ thấy vai trò ứng dụng to lớn của String trong suốt quá trình lập trình. Còn mảng kí tự ít được dùng hơn String.
Truy nhập vào phần tử của xâu kí tự.
Ta có thể truy nhập vào từng kí tự một của xâu kí tự với tên biến và chữ số đặt trong ngoặc vuông như khi truy nhập vào phần tử của mảng. Chỉ số này có thể chạy từ 1 tới độ dài cực đại của xâu kí tự.
Nếu vị trí kí tự đó nằm ngoài độ dài thực của xâu kí tự thì phần từ đó của xâu không có giá trị xác định. Vì vậy khi truy nhập vào từng phần tử của xâu chữ ta còn cần phải kiểm tra xem vị trí đó có nằm trong khoảng độ dài thực của xâu hay không.
2. CÁC THAO TÁC TRÊN XÂU KÍ TỰ
a) Phép cộng xâu:
Xâu kí tự có thể được sử dụng như là các toán hạng trong các biểu thức để ghép xâu kí tự qua toán tử +.
Ví dụ:
Filename:= 'A\' + Filename ;
Cho kết quả Filename = 'A\VIDU.PAS'
Hoặc Filename:= 'Ten' + File' + Pas ;
Cho kết quả Filename = 'TenFile.Pas'
Rõ ràng là với kiểu mảng kí tự, chúng ta không thể thực hiện được phép cộng để ghép hai mảng lại với nhau vì độ dài của chúng đã cố định.
Không có tính trừ, nhân, chia... cho xâu kí tự.
b) So sánh xâu kí tự:
Xâu kí tự có thể được dùng trong các biểu thức quan hệ để so sánh:
- Khi so sánh hai xâu kí tự, các kí tự của hai xâu được so sánh từng cặp một từ trái qua phải theo giá trị của bảng mã ASCII.
- Nếu hai xâu có độ dài khác nhau song số kí tự giống nhau đến độ dài xâu ngắn nhất thì xâu có độ dài ngắn hơn được coi là bé hơn.
'FILENAME' < 'FILENAME A': cho giá trị TRUE.
'FILENAME' < 'FILENAME': cho giá trị FALSE.
- Hai xâu kí tự bằng nhau nếu như cả hai về nội dung lẫn độ dài của chúng là giống nhau.
'FILENAME' = FILENAME' là biểu thức có giá trị TRUE.
c) Khai báo STRING làm tham số CTC:
Tương tự như ARRAY, STRING có thể dùng làm tham số cho chương trình con. Ta phải khai báo kiểu dữ liệu trước khi sử dụng nó.
Ví dụ:
FUNCTION VIDUSAI: STRING[30]
PROCEDURE VIDUSAI (ST: STRING[50]) ;
Ta cần phải viết như sau:
TYPE
ST30 = STRING[30] ;
ST50 = STRING[50] ;
VAR
CHUOI: ST30
CHUOI: ST50 ;
FUNCTION VIDU1: ST30 ;
PROCEDURE VIDU2: (ST: ST50) ;
Khi dùng String làm tham số cho CTC, về nguyên tắc độ dài của tham số thực phải bàng độ dài của tham số hình thức, nghĩa là Turbo Pascal kiểm tra độ dài xâu giữa các tham số (Range Checking). Vì vậy lời gọi thủ tục sau là đúng hoàn toàn:
VI DU2 (CHUOI50) ;
Đó là vì CHUOI50 (tham số thực sự) có kiểu là ST50 trùng với tham số hình thức ST: ST50.
Lời gọi thủ tục VIDU2 (CHUOI30) ; sẽ bị coi là không hợp lệ vì chuỗi CHUOI30 có kiểu là ST30.
Tuy vậy bạn có thể hoàn toàn chuyển tham số STRING có độ dài khác và CTC bằng cách hướng dẫn chương trình dịch Turbo Pascal không kiểm tra tính tương thích về độ dài. Cách làm: định hướng |$V-| sẽ bỏ việc kiểm tra tính tương thích về độ dài của tham số xâu kí tự và {$V+} sẽ làm hoạt động việc kiểm tra trở lại.
d) Viết ra màn hình:
Có thể dùng Write(St) và Writeln(St) cho 1 xâu kí tự St.
e) Đọc:
Readln (St) sẽ đọc các kí tự cho xâu St với độ dài thực là số kí tự gõ vào từ bàn phím. Nếu ta gõ Return luôn, không cho kí tự nào thì St rỗng (St = ' '), nếu ta gõ vào nhiều hơn số kí tự tối đa của St thì các kí tự cuôi dư ra sẽ bị bỏ qua.
f) Các thủ tục và hàm chuẩn xử lí xâu kí tự:
Do xâu kí tự được dùng rất phổ biến nên Turbo Pascal đã đưa vào một số thủ tục và hàm để xử lí xâu kí tự. Độ dài xâu là 255 được sử dụng để minh họa.
Hàm Lenght (St) cho ta độ dài thực sự của xâu kí tự St.
Ta có thể tự viết lại hàm Lenght (St) như sau:
FUNCTION LENGHT (St: STRING): BYTE ;
Begin
Lenght:= Ord(St[0]) ;
End ;
Ví dụ:
Với St:= 'FILENAME' thì Lenght(St) có giá trị bằng 8.
Thủ tục xóa Delete( St, Vi_tri, S1) sẽ xóa bỏ trong xâu St một số kí tự S1 kể từ vị trí Vi_tri.
Ví dụ:
Với St:= 'FILENAME' thì sau khi gọi Delete(St, 2, 3) St sẽ có giá trị bằng 'FNAME' vì xóa đi 3 kí tự 'ILE'.
Nếu Vi_tri + SI > Lenght(St) thì chỉ xóa những kí tự cuối của nó tính từ Vi_tri.
Ví dụ:
Với St:= 'FILENAME' thì sau khi gọi Insert ('TEST', St, 5) St sẽ có giá trị bằng 'FILETESTNAME'.
Nếu Lenght (S1) + Lenght (St) vượt quá độ đài cực đại của St thì các kí tự nằm trong độ dài cực đại mới được giữ lại.
Nếu Vi_tri > Lenght (St) thì SI sẽ được nối vào đuôi của St.
Thủ tục St (GiaTri, St) sẽ biến đổi giá trị bằng sô nguyên hoặc thực hành một chuỗi kí tự biểu diễn số đó.
Ví dụ: với I = 234,
Str (I: 5, St) sẽ cho St = 234(*5 kí tự*).
Thủ tục Val(St, GiaTri, Maloi) sẽ biến đổi một xâu kí tự St thành một số nguyên hoặc thực chứa kết quả trong Giatri. Maloi dùng để phát hiện lỗi: nếu St chứa chuỗi kí tự tương ứng với một số thì Maloi có giá trị 0. Ngược lại, Maloi sẽ mang giá trị là vị tri của kí tự đầu tiên sai trong St.
Ví dụ: St = '123.456', X là biến thực, Er là biến nguyên.
Val(St, X, Er) cho ta X = 123.456 và Er = 0.
Nếu I là biến nguyên
Val(St, X, Er) cho ta I = 0 và Er = 4.
Nếu St = '23.456
Val(St, X, Er) cho ta X = 0 và Er = 3.
Hàm Copy(St, Vi_tri, Kt) sẽ nhập kí tự trong St bắt đầu từ vị trí Vi_tri.
Ví dụ: St =:='123456789';
St1:= Copy(St, 4, 3) ; sẽ cho St1= '456'.
Hàm ghép Concat(St1, St2,, Stn) sẽ ghép nối tất cả các chuỗi St1, St2, Stn thành một xâu kí tự tương tự ghép +.
Video liên quan
Đăng ký:
Đăng Nhận xét (Atom)
Bài đăng phổ biến
-
Như chúng ta cũng biết, chiếc điện thoại từ lâu đã trở thành một vật bất ly thân trong đời sống xã hội ngày nay. Để tiện cho công việc cũng ...
-
Công Thức Chế Tạo Đồ Trong Minecraft 1.16.4 Các công thức chế tạo đồ cơ bản Items Nguyên liệu Cách chế tạo Công dụng GỗThân gỗ Xây dựng nhà ...
-
HÌNH THỨC GÕ ĐỆM KHI HÁT CÁC CA KHÚC CHO TRẺ MẦM NON VÀ CÁCH HƯỚNG DẪN SINH VIÊN THỰC HÀNH HIỆU QUẢ Âm nhạc là một trong những hoạt động ...
-
The worst song in Eurovision came in first and the best came second to last . How stupid! Bài hát tệ nhất ở Eurovision đứng đầu và bài hát...
-
Đáy của hình lăng trụ đứng tam giác ABC.A'B'C' là tam giác đều cạnh bằng 4 . Tính khoảng cách giữa hai đường thẳng AA' và BC...
-
Trong bài viết dưới đây Taimienphi.vn sẽ hướng dẫn bạn cách để đổi màu áo, quần bằng Photoshop . Thủ thuật đổi màu ...
-
Bạn đã đặt trước thứ gì đó nhưng bây giờ bạn đang suy nghĩ lại? Bạn đã thay đổi ý định về một bộ phim hoặc album nhạc mà bạn đã đặ...
-
Chất Kết Tủa Là Gì ? Công Thức Hóa Học Chất Kết Tủa admin November 28, 2019 Tin Tức Comments Off on Chất Kết Tủa Là Gì ? Công Thức Hóa ...
-
IC là một loại linh kiện không thể thiếu trong bất cứ mạch điện tử nào, vậy IC là gì? Cầu tạo và chức năng là gì? IC là gì? IC tiếng anh là ...
-
Nếu bạn đang tò mò không biết crush nào hay người bạn bí mật nào đang theo dõi facebook của bạn âm thầm nhưng không biết cách tìm ra đối tượ...
Danh sách Blog của Tôi
Labels
- Android
- Apple
- Bài tập
- Bàn phím
- Bánh
- Bao lâu
- Bao nhiêu
- Bí quyết
- Cách
- Chia sẻ
- Chuột
- Có nên
- Công Nghệ
- Công thức
- Cpu
- Cryto
- Danh sách
- Dịch
- Đại học
- Đánh giá
- Đẹp
- Eth
- File
- Film
- Gái
- Game
- Giá
- Giá bán
- Giá rẻ
- Giới Tính
- Gpu
- Gym
- Học
- Học Tốt
- Hỏi Đáp
- Hướng dẫn
- Ios
- Ipad
- Iphone
- Khoa Học
- Khỏe
- Khỏe Đẹp
- Kinh nghiệm
- Là gì
- Làm sao
- Laptop
- Lg
- List
- Macbook
- Màn hình
- Máy
- Máy tính
- Mẹo
- Mẹo Hay
- Món
- Món Ngon
- Mua Sắm
- Nấu
- Ngân hà
- Nghĩa là gì
- Nghiên cứu
- Ngoại ngữ
- Ngôn ngữ
- Nhà
- Ở đâu
- Phát minh
- Phân tích
- Phim
- Phụ nữ
- Phương pháp
- Phương trình
- Review
- Sách
- Samsung
- Sáng kiến
- So sánh
- Son
- Tại sao
- Thể dục
- Thế nào
- Thị trường
- Thịt
- Thuốc
- Tiếng anh
- Tiếng hàn
- Tiếng trung
- Top
- Top List
- Tốt nhất
- Trade
- Trai
- Trái đất
- Trò chơi
- Trường lớp
- Váy
- Vì sao
- Xây
- Xây Đựng
0 nhận xét: