Mảng
chuỗi/ký tự
Một chuỗi
có thể được khai báo như là một mảng ký tự, và được kết thúc bởi một ký tự
NULL. Mỗi ký tự của chuỗi chiếm 1 byte, và ký tự cuối cùng của chuỗi luôn luôn
là ký tự ‘\0’. Ký tư ‘\0’ được gọi là ký tự null. Nó là một mã thoát
(escape sequence) tương tự như ‘\n’,
thay thế cho ký tự có giá trị 0. Vì ‘\0’ luôn là ký tự cuối cùng của một chuỗi,
nên các mảng ký tự phải có nhiều hơn một ký tự so với chiều dài tối đa mà chúng
quản lý. Ví dụ, một mảng ary quản lý một chuỗi 10 ký tự phải được khai
báo như sau:
char ary[11];
Vị trí
thêm vào được sử dụng để lưu trữ ký tự null. Nên nhớ rằng ký tự kết thúc (ký tự
null) là rất quan trọng.
Các giá
trị chuỗi có thể được nhập vào bằng cách sử dụng hàm scanf(). Với
chuỗi ary được khai báo ở trên, mã lệnh nhập sẽ như sau:
scanf(“%s”, ary);
Trong lệnh
trên, ary xác định vị trí nơi mà lần lượt các ký tự của mảng sẽ được lưu
trữ.
Ví dụ:
#include
<stdio.h>
void main() {
char
ary[5];
int
i;
printf(“\n Enter string: ”);
scanf(“%s”, ary);
printf(“\n The string is %s \n\n”,
ary);
for
(i = 0; i < 5; i++)
printf(“\t%d”, ary[i]);
}
Các kết
quả thực thi chương trình với những dữ liệu nhập khác nhau như sau:
Nếu chuỗi
được nhập là appl, kết quả sẽ là:
The string is appl
97 112
112 108 0
Kết quả
như trên là của 4 ký tự (appl) và ký tự thứ 5 là ký tự null. Điều này được thấy
rõ với mã ASCII cho các ký tự được in ra ở dòng thứ hai. Ký tự thứ năm được in
la 0, là giá trị của ký tự null.
Nếu chuỗi
nhập vào là apple, kết quả sẽ là:
The string is apple
97 112
112 108 101
Kết quả
ở trên của là một dữ liệu đầu vào có 5 ký tự a, p, p, l và e. Nó không được xem
là một chuỗi bởi vì ký tự thứ 5 của mảng không phải là \0. Một lần nữa, điều
này được thấy rõ bằng dòng in ra mã ASCII của các ký tự a, p, p, l, e.
Nếu chuỗi
được nhập vào là ap, thì kết quả sẽ là:
The string is ap
97 112
0 6 100
Trong
ví dụ trên, khi chỉ có hai ký tự được nhập, ký tự thứ ba sẽ là ký tự null. Điều
này cho biết là chuỗi đã được kết thúc. Những ký tự còn lại là những ký tự
không dự đoán được.
Trong
trường hợp trên, tính quan trọng của ký tự null trở nên rõ ràng. Ký tự null xác
định sự kết thúc của chuỗi và là cách duy nhất để các hàm làm việc với chuỗi sẽ
biết đâu là điểm kết thúc của chuỗi.
Mặc dù
C không có kiểu dữ liệu chuỗi, nhưng nó cho phép các hằng chuỗi. Một hằng chuỗi
là một dãy các ký tự được đặt trong dấu nháy đôi (“”). Không giống như
các hằng khác, nó không thể được sửa đổi trong chương trình. Ví dụ như:
“Hi Aptechite!”
Trình
biên dịch C sẽ tự động thêm vào ký tự null cuối chuỗi.
C hỗ trợ
nhiều hàm cho chuỗi, các hàm này nằm trong thư viện chuẩn string.h.
Một vài hàm được đưa ra trong bảng 11.1. Cách làm việc của các hàm này sẽ được
thảo luận trong bài 17.
Tên
hàm Chức
năng
strcpy(s1,
s2) Sao chép s2 vào s1
strcat(s1,
s2) Nối
s2 vào cuối của s1
strlen(s1) Trả
về chiều dài của s1
strcmp(s1,
s2) Trả về 0 nếu s1 và s2 là giống nhau;
nhỏ hơn 0 nếu s1<s2; lớn hơn 0 nếu s1> s2
strchr(s1,
ch) Trả
về một con trỏ trỏ đến vị trí xuất hiện đầu tiên của ch trong s1
strstr(s1,
s2) Trả
về một con trỏ trỏ đến vị trí xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1
Đăng nhận xét