Kiểu dữ liệu xâu kí tự (string) trong Pascal 2020-07-30T21:38:23+07:002020-07-30T21:38:23+07:00https://sachgiai.com/Tin-hoc/kieu-du-lieu-xau-ki-tu-string-trong-pascal-13443.htmlhttps://sachgiai.com/uploads/news/2020_07/lap-trinh-pascal.jpgSách Giảihttps://sachgiai.com/uploads/sach-giai-com-logo.pngThứ năm - 30/07/2020 21:36 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. 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 +.
Ý kiến bạn đọc
Sắp xếp theo bình luận mới Sắp xếp theo bình luận cũ Sắp xếp theo số lượt thích
Theo dòng sự kiện
Lập trình trò chơi đổi màu bi trong Pascal
Lập trình trò chơi tính điểm quân đôminô trong Pascal
Xem tiếp...
Những tin mới hơn
Kiểu dữ liệu tập hợp (set) trong Pascal
Kiểu bản ghi (record) trong Pascal
Những tin cũ hơn
Kiểu dữ liệu mảng (array) trong Pascal
Biến toàn cục và biến địa phương - khái niệm tam tác dụng trong Pascal
Lớp 1
Kết nối tri thức
Tiếng Việt 1
Toán 1
Giáo dục thể chất 1
Mỹ thuật 1
Chân trời sáng tạo
Tiếng Việt 1
Toán 1
Cánh diều
Âm nhạc 1
Giáo dục thể chất 1
Hoạt động trải nghiệm 1
Toán 1
Tự nhiên và xã hội 1
Lớp 2
Kết nối tri thức
Toán 2
Tiếng Việt 2
Chân trời sáng tạo
Tiếng Việt 2
Toán 2
Cánh diều
Toán 2
Tiếng Việt 2
Lớp 3
Kết nối tri thức
Tiếng Việt 3
Toán 3
Cánh diều
Tiếng Việt 3
Toán 3
Chân trời sáng tạo
Tiếng Việt 3
Toán 3
Lớp 4
Kết nối tri thức
Tiếng Việt 4
Toán 4
Chân trời sáng tạo
Tiếng Việt 4
Toán 4
Cánh diều
Tiếng Việt 4
Toán 4
Lớp 5
Kết nối tri thức
Tiếng Việt 5
Toán 5
Cánh diều
Tiếng Việt 5
Toán 5
Chân trời sáng tạo
Tiếng Việt 5
Toán 5
Lớp 6
Kết nối tri thức
Ngữ Văn 6
Toán 6
Tiếng Anh 6 Global Success
Lịch sử và Địa lí 6
Giáo dục công dân 6
Tin học 6
Cánh diều
Giáo dục công dân 6
Ngữ Văn 6
Toán 6
Chân trời sáng tạo
Ngữ Văn 6
Toán 6
Giáo dục công dân 6
Lớp 7
Kết nối tri thức
Ngữ Văn 7
Toán 7
Tiếng Anh 7 Global Success
Giáo dục công dân 7
Lịch sử và Địa lí 7
Khoa học tự nhiên 7
Tin học 7
Công nghệ 7
Cánh Diều
Ngữ Văn 7
Toán 7
Khoa học tự nhiên 7
Chân trời sáng tạo
Ngữ Văn 7
Toán 7
Mĩ thuật 7
Âm nhạc 7
Lớp 8
Kết nối tri thức
Ngữ Văn 8
Toán 8
Khoa học tự nhiên 8
Giáo dục công dân 8
Tin học 8
Lịch sử và Địa lí 8
Công nghệ 8
Tiếng Anh 8 Global Success
Cánh Diều
Ngữ Văn 8
Toán 8
Công Dân 8
Chân trời sáng tạo
Ngữ Văn 8
Toán 8
Lớp 9
Kết nối tri thức
Ngữ Văn 9
Toán 9
Khoa học tự nhiên 9
Giáo dục công dân 9
Tin học 9
Lịch sử và Địa lí 9
Tiếng Anh 9 Global Success
Công nghệ 9
Cánh Diều
Ngữ Văn 9
Toán 9
Chân trời sáng tạo
Ngữ Văn 9
Toán 9
Lớp 10
Kết nối tri thức
Ngữ Văn 10
Toán 10
Kinh tế và Pháp luật 10
Tiếng Anh 10 Global Success
Lịch Sử 10
Địa Lí 10
Vật Lí 10
Hoá học 10
Sinh học 10
Công nghệ trồng trọt 10
Công nghệ thiết kế 10
Quốc Phòng và An Ninh 10
Tin học 10
Cánh Diều
Ngữ Văn 10
Toán 10
Kinh tế và Pháp luật 10
Tin học 10
Hoá học 10
Lịch sử 10
Địa Lí 10
Sinh học 10
Vật lí 10
Tiếng Anh 10 Explore New Worlds
Công nghệ trồng trọt 10
Công nghệ thiết kế 10
Chân trời sáng tạo
Ngữ Văn 10
Toán 10
Lịch Sử 10
Địa Lí 10
Sinh học 10
Vật Lí 10
Hoá học 10
Quốc Phòng và An Ninh 10
Kinh tế và Pháp luật 10
Tiếng Anh 10 Friends plus
Lớp 11
Kết nối tri thức
Ngữ Văn 11
Toán 11
Hoá học 11
Sinh học 11
Địa Lí 11
Lịch Sử 11
Vật Lí 11
Kinh tế và Pháp luật 11
Công nghệ 11 Chăn nuôi
Công nghệ 11 Cơ khí
Tin học 11 Ứng dụng
Tin học 11 Khoa học máy tính
Tiếng Anh 11 Global Success
Cánh Diều
Ngữ Văn 11
Toán 11
Hoá học 11
Lịch Sử 11
Địa Lí 11
Sinh học 11
Vật Lí 11
Tin học 11 Ứng dụng
Tin học 11 Khoa học máy tính
Tiếng Anh 11 Explore New Worlds
Quốc phòng và An ninh 11
Kinh tế và Pháp luật 11
Công nghệ 11 Chăn nuôi
Công nghệ 11 Cơ khí
Chân trời sáng tạo
Ngữ Văn 11
Toán 11
Địa Lí 11
Hoá học 11
Sinh học 11
Lịch Sử 11
Kinh tế và Pháp luật 11
Tiếng Anh 11 Friends plus
Vật Lí 11
Lớp 12
Kết nối tri thức
Ngữ Văn 12
Toán 12
Địa Lí 12
Hoá học 12
Lịch Sử 12
Sinh học 12
Vật Lí 12
Tiếng Anh 12 Global Success
Tin học 12 Ứng dụng
Tin học 12 Khoa học máy tính
Kinh tế và Pháp luật 12
Công nghệ 12 Chăn nuôi
Công nghệ 12 Cơ khí
Cánh Diều
Ngữ Văn 12
Toán 12
Chân trời sáng tạo
Ngữ Văn 12
Toán 12
THÀNH VIÊN
Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site Nhập mã do ứng dụng xác thực cung cấp Thử cách khác Nhập một trong các mã dự phòng bạn đã nhận được. Thử cách khác Đăng nhập Đăng ký