7.2. Kiểu chuỗi (xâu) ký tự 7.2.1 Khái niệm -
Xâu ký tự là một kiểu dữ liệu nhận giá trị là dãy các ký tự trong bảng mã ASCII, dãy ký tự này được đặt trong một cặp dấu nháy đơn (‘ ’)
Ví dụ 7.15:
St1 = ‘NGON NGU PASCAL’
St2 = ‘Tin hoc nam 2002’
St3 = ‘123456’
St4 = ‘Truong Dai hoc Dien Luc’
- Độ dài của một xâu là số ký tự của xâu đó. Xét ví dụ 7.20:
độ dài của st1 là 15,
đồ dài của st2 là 16,
độ dài của st3 là 6,
độ dài của st4 là 23,
- Xâu rỗng là xâu không chứa ký tự nào, nó có độ dài là 0, được ký hiệu là ‘’. Xâu rỗng khác với xâu chứa ký tự trống ‘ ’. Xâu chỉ chứa 1 ký tự trống có độ dài là 1.
-
Xâu ký tự
Số thứ tự
Trong bộ nhớ của máy, một biến xâu 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 xâu, mỗi byte còn lại chứa một ký tự. Cấu trúc của biến St1 nói trên có dạng:
|
N
|
G
|
O
|
N
|
|
N
|
G
|
U
|
|
P
|
A
|
S
|
C
|
A
|
L
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
Độ dài N (=15) của biến St1 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 )
7.2.2. Khai báo xâu ký tự
7.2.2.1. Khai báo kiểu dữ liệu xâu:
TYPE Tên_kiểu_xâu = string; {mặc định là xâu dài tối đa 256 ký tự}
Hoặc
TYPE Tên_kiểu_xâu = string[độ dài tối đa của xâu];
VAR biến_xâu : Tên_kiểu_xâu;
Trong đó độ dài tối đa của xâu là một số nguyên dương nằm trong đoạn [0..256].
Ví dụ 7.16: Khai báo kiểu họ tên là kiểu xâu ký tự có độ dài tối đa là 40 ký tự.
TYPE kieu_hoten = string[40];
VAR ht: kieu_hoten; {khai báo biến ht có kiểu là kieu_hoten}
*Chú ý: Khi một biến xâu đượ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 xâu có kiểu String ).
7.2.2.2. Khai báo biến kiểu dữ liệu xâu:
VAR tên_biến_xâu: string;
Hoặc
VAR tên_biên_xâu: string[độ dài tối đa của xâu];
Ví dụ 7.17:
VAR st1: string; {khai báo biến xâu st mặc định có độ dài tối đa là 256}
st2: string[50]; {khai báo biến xâu st có độ dài tối đa là 50}
* Chú ý: Nếu xâu st có độ dài tối đa là N mà ta lại gán cho nó xâu có độ dài lớn hơn N thì xâu st chỉ nhận N ký tự đầu tiên.
Ví dụ 7.18:
- Var st: string[15];
Sau lệnh gán st:=’Truong Dai hoc Dien Luc’; thì st sẽ nhận giá trị là: ‘Truong Dai hoc ’
- Var st1: string[50];
st1 := ‘C5CNTD’
* Chú ý: Cần phân biệt độ dài với độ dài tối đa của biến xâu: độ 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 xâu, còn độ dài của xâu là số ký tự đang thực có trong xâu. Như ví dụ 7.23, xâu st1 có độ dài tối đa là 50 nhưng độ dài thực tế của xâu là 6.
7.2.3. Viết ra và đọc vào một xâu ký tự
Có thể in một xâu ký tự ra màn hình, máy in hay tệp văn bản bản bằng các lệnh write
Ví dụ 7.19:
- Writeln(st); in ra nguyên vẹn xâu st lên màn hình,
- Writeln(‘Turbo Pascal’); in lên màn hình dòng chữ ‘Turbo Pascal’, viết xong con trỏ ở đầu dòng tiếp theo.
- Write(‘Turbo Pascal’); in lên màn hình dòng chữ ‘Turbo Pascal’, viết xong con trỏ ở cuối dòng vừa in.
Có thể đọc vào một giá trị cho một biến kiểu xâu bằng các lệnh read, xem lại sử dụng các lệnh read trong phần nhập xuất dữ liệu.
Ví dụ 7.20:
- readln(st); hay read(st); nhập dữ liệu cho xâu st
- readln(st1, st2); nhập dữ liệu cho biến xâu st1 và st2
7.2.4. Các phép toán trên xâu
7.2.4.1. Phép gán
Cũng tương tự như các kiểu dữ liệu đơn giản đã học, ta hoàn toàn có thể thực hiện gán giá trị hai biến xâu cho nhau.
Ví dụ 7.21: với khai báo
Var st1, st2: string[10];
st:string;
Thì có thể thực hiện các lệnh gán:
(1) St1:=st2; St2:=st1; st:=st1; st1:= st;
(2) St1 := ‘123456’ ….
(3) St2 := ‘1234567890abcdef’;
* Chú ý: khi thực hiện phép gán xâu st2 có độ dài L2 cho biến xâu st1 có độ dài L1 mà L2>L1 thì st1 chỉ nhận L1 ký tự đầu tiên của xâu st2.
Như ví dụ 7.28, sau lệnh gán (3) thì st2 = ‘1234567890’.
7.2.4.2. Phép so sánh
Có thể thực hiện các phép toán so sánh với kiểu xâu ký tự.
Quy tắc so sánh:
- Thực hiện so sánh giữa các cặp ký tự tương ứng từ trái qua phải. Khi phát hiện có một cặp ký tự khác nhau thì xâu nào chứa ký tự nhỏ hơn sẽ nhỏ hơn.
- Nếu nội dung của hai xâu giống nhau từ đầu đến hết chiều dài của xâu ngắn hơn thì xâu ngắn hơn là nhỏ hơn
Ví dụ 7.22: ‘hoa’ > ‘Hoa’
‘Pascal’ > ‘Pas’
‘hai’ < ‘hao’
‘Hoa’> ‘Hao’
- Hai xâu bằng nhau nếu chúng dài bằng nhau và mọi cặp ký tự ở các vị trí tương ứng đều giống nhau.
Ví dụ 7.23:
Biểu thức ‘Pascal’ = ‘Pascal’ cho kết qủa là đúng
Biểu thức ‘Pascal’ = ‘PAscal’ cho kết qủa là sai.
Ví dụ 7.24: Viết chương trình nhập vào hai xâu ký tự st1 và st2.
-
In lên màn hình hai xâu, mỗi xâu một dòng.
-
Cho biết xâu nào có giá trị lớn hơn, in xâu đó lên màn hình.
Program vidu_7_24;
Var st1,st2 : string;
Begin
Write(‘ Nhap vao xau st1 = ‘);
Readln(st1); {nhap du lieu cho xau st1}
Write(‘ Nhap vao xau st2 = ‘);
Readln(st2); {nhap du lieu cho xau st2}
{So sanh hai xau}
If st1>st2 then
Writeln(‘ Xau lon hon la xau ‘, st1)
Else
if st1Writeln(‘ Xau lon hon la xau ‘, st2)
else writeln(‘ hai xau bang nhau’);
Readln;
End.
7.2.4.3. Phép cộng xâu
Phép toán cộng (+) hai xâu st1 và st2 (ký hiệu là st1+st2 ) là phép nối xâu st2 vào ngay sau xâu st1.
Ví dụ 7.25: st1 := ‘Truong ’;
st2 := ‘Dai hoc’;
st3 := st1 + st2; thì st3 = ‘Truong Dai hoc’;
st4 := st3 +’ Dien luc’;
thì st4 = ‘Truong Dai hoc Dien luc’;
st5 := ‘Turbo’ + ‘ Pascal’;
thì st5 = ‘Turbo Pascal’;
Chia sẻ với bạn bè của bạn: |