Xâu (string) là một kiểu dữ liệu cơ bản và quan trọng trong lập trình, được sử dụng để biểu diễn các chuỗi ký tự. Một khái niệm then chốt liên quan đến xâu là “Xâu Rỗng Có độ Dài Bằng”. Bài viết này sẽ đi sâu vào khái niệm này, cùng với các thao tác xử lý xâu phổ biến và ứng dụng thực tế trong lập trình.
Xâu là một dãy các kí tự (trong bảng mã ASCII), có thể coi xâu như một mảng một chiều mà mỗi phần tử là một kí tự.
Xâu rỗng là một xâu không chứa bất kỳ kí tự nào. Điểm đặc biệt của xâu rỗng là độ dài của nó bằng 0. Điều này có nghĩa là nó không chiếm bất kỳ không gian lưu trữ nào (ngoại trừ một ít metadata để biểu diễn chính nó là một xâu).
Các ngôn ngữ lập trình đều có quy tắc, cách thức cho phép xác định:
- Tên kiểu xâu;
- Cách khai báo biến kiểu xâu;
- Số lượng kí tự của xâu;
- Các thao tác với xâu;
- Cách tham chiếu tới phần tử xâu.
Biểu thức gồm các toán hạng là biến xâu, biến kí tự hoặc hằng xâu được gọi là biểu thức xâu.
Khai báo xâu trong Pascal
Trong ngôn ngữ lập trình Pascal, biến kiểu xâu có thể khai báo như sau:
var <tên biến>: string[<độ dài lớn nhất của xâu>]
Ví dụ:
var Hoten: string[26];
Nếu bỏ qua phần khai báo độ dài, độ dài lớn nhất của xâu sẽ nhận giá trị mặc định là 255. Ví dụ:
var chugiai: string;
Các thao tác xử lí xâu
Các ngôn ngữ lập trình cung cấp nhiều thao tác để xử lý xâu, bao gồm:
- Phép ghép xâu (concatenation): Ghép nhiều xâu thành một. Ví dụ:
'Nghe' + 'An'
kết quả là'Nghe An'
. - Các phép so sánh: So sánh hai xâu theo thứ tự từ điển. Ví dụ:
'Que huong' < 'Que hương'
. delete(st, vt, n)
: Xóan
kí tự của xâust
bắt đầu từ vị trívt
. Ví dụ:st := 'abcdef'; delete(st, 4, 2)
cho kết quảst := 'abcf'
.insert(s1, s2, vt)
: Chèn xâus1
vào xâus2
bắt đầu ở vị trívt
. Ví dụ:s1 := 'PC'; s2 := 'IBM486'; insert(s1, s2, 4)
cho kết quảs2 := 'IBMPC486'
.copy(S, vt, N)
: Tạo xâu gồmN
kí tự liên tiếp bắt đầu từ vị trívt
của xâuS
. Ví dụ:S := 'Bai hoc thu 9'; copy(S, 9, 5)
cho kết quả'thu 9'
.length(s)
: Trả về độ dài của xâus
. Ví dụ:s := 'Tin hoc'; length(s)
trả về7
.pos(s1, s2)
: Trả về vị trí xuất hiện đầu tiên của xâus1
trong xâus2
. Ví dụ:s2 := 'abcdef'; pos('cd', s2)
trả về3
.upcase(ch)
: Chuyển chữ cái trongch
thành chữ in hoa. Ví dụ:upcase('d')
trả về'D'
.
Lưu ý rằng:
- Xâu được tạo thành bởi các kí tự, trong đó có thể có dấu cách.
- Trong chương trình, khi viết một xâu kí tự, ta phải viết xâu đó giữa hai dấu nháy đơn.
- Xâu chỉ gồm một dấu cách được viết là
' '
. Xâu rỗng được viết là''
. - Khi sử dụng lệnh gán, ta có thể gán trị là một kí tự cho một biến xâu kí tự nhưng việc gán trị là một xâu kí tự cho một biến kiểu kí tự là không hợp lệ dù xâu đó có độ dài bằng 1.
Ví dụ minh họa
Ví dụ 1: Bài toán đưa ra màn hình xâu thu được bằng việc loại bỏ các dấu cách (nếu có) của xâu nhập vào từ bàn phím.
program RemoveSpaces;
var
i, k: byte;
a, b: string;
begin
write('Nhap vao xau: ');
readln(a);
k := length(a);
b := ''; {*Khoi tao xau rong*}
for i := 1 to k do
if a[i] <> ' ' then
b := b + a[i];
writeln('Ket qua: ', b);
readln;
End.
Khi chạy chương trình, nhập vào một xâu: 'Thủ đô Hà Nội'
thì chương trình đưa ra kết quả: 'ThudoHaNoi'
, còn khi nhập vào xâu 'Việt Nam quê hương tôi'
thì chương trình đưa ra thông báo: 'VietNamquehuongtoi'
.
Ảnh minh họa kết quả chương trình loại bỏ khoảng trắng khỏi chuỗi nhập vào. Chương trình loại bỏ khoảng trắng trong xâu ký tự, ví dụ chuyển “Thủ đô Hà Nội” thành “ThudoHaNoi”.
Ví dụ 2: Bài toán tạo xâu gồm tất cả các chữ số trong xâu nhập vào từ bàn phím (giữ nguyên thứ tự xuất hiện của chúng) và đưa kết quả ra màn hình.
program ExtractDigits;
var
s1, s2: string;
i: byte;
begin
write('Nhap xau s1: ');
readln(s1);
s2 := ''; {khoi tao xau s2 rong}
for i := 1 to length(s1) do
if s1[i] in ['0'..'9'] then
s2 := s2 + s1[i];
writeln('Xau so: ', s2);
readln;
end.
Khi chạy chương trình, nhập vào xâu vừa kí tự vừa chữ số, chẳng hạn xâu: 'chào mùa hè 2007'
thì kết quả của chương trình là 2007
, còn khi nhập vào xâu 'ngay 25 thang 5 nam 2007'
, kết quả của chương trình là 2552007
.
Ứng dụng của xâu rỗng
Xâu rỗng có nhiều ứng dụng quan trọng trong lập trình:
- Khởi tạo biến xâu: Xâu rỗng thường được sử dụng để khởi tạo giá trị ban đầu cho một biến xâu. Điều này đảm bảo rằng biến xâu chứa một giá trị hợp lệ trước khi được sử dụng.
- Kiểm tra điều kiện: Kiểm tra xem một xâu có phải là xâu rỗng hay không là một thao tác phổ biến trong lập trình. Điều này có thể được sử dụng để kiểm tra xem người dùng đã nhập dữ liệu vào một trường văn bản hay chưa, hoặc để xác định xem một xâu đã được xử lý hết hay chưa.
- Xây dựng xâu: Xâu rỗng có thể được sử dụng làm điểm bắt đầu để xây dựng một xâu lớn hơn bằng cách thêm các ký tự hoặc xâu khác vào nó.
- Giải phóng bộ nhớ: Gán một xâu rỗng cho một biến xâu có thể giúp giải phóng bộ nhớ mà xâu đó đang sử dụng.
Kết luận
Xâu rỗng là một khái niệm cơ bản nhưng quan trọng trong lập trình. Hiểu rõ về xâu rỗng và các thao tác xử lý xâu sẽ giúp bạn viết mã hiệu quả và dễ bảo trì hơn. Việc nắm vững kiến thức về “xâu rỗng có độ dài bằng” là một bước quan trọng để trở thành một lập trình viên giỏi.