kuteboy
14-10-2008, 02:04 PM
Giới thiệu
- Các chuỗi trong C được cài đặt như là các mảng ký tự kết thúc bởi ký tự NULL ('\0'). Bài này sẽ thảo luận về công dụng và thao tác trên chuỗi.
1. Các biến và hằng kiểu chuỗi
- Các biến chuỗi sử dụng để lưu trữ một chuỗi các ký tự. Như các biến khác, các biến này phải được khai báo trước sử dụng. Một hằng chuỗi là một dãy các ký tự nằm trong dấu nháy kép. Mỗi ký tự trong một chuỗi được lưu trữ như là một phần tử của mảng. Ký tự "\0" (null) được tự động thêm vào trong cách biểu diễn bên trong của chuỗi để đánh dấu điểm kết thúc chuỗi. Vì vậy, khi khai báo một chuỗi, phải tăng kích thước của nó thêm một phần tử để chứa dữ liệu kết thúc null.
2. Con trỏ trỏ đến chuỗi
- Chuỗi có thể được lưu và truy cập bằng cách sử dụng con trỏ kiểu ký tự. Một con trỏ kiểu ký tự trỏ đến một chuỗi được khai báo như sau:
char *pstr = "WELCOME": -pstr là một con trỏ được khởi tạo để trỏ đến một hằng chuỗi. Con trỏ pstr có thể thay đổi đến bất kỳ một chuỗi nào khác. Mặc dù khi con trỏ pstr trỏ đến một chuỗi khác thì ta không thể truy xuất đến chuỗi "WELCOME" được nữa.
3. Các thao tác nhập xuất chuỗi
- Các thao tác nhập/xuất chuỗi (I/O) chuỗi trong C được thực hiện bằng cách gọi các hàm. Các hàm này là một phần của thư viện nhập/xuất chuẩn tên stdio.h. Một chương trình muốn sử dụng các hàm nhập/xuất chuỗi phải có câu lệnh khai báo như sau ở đầu chương trình:
#include <stdio.h>; - Khi chương trình có chứa câu lệnh này được biên dịch, thì nội dung của tập tin stdio.h sẽ trở thành một phần của chương trình.
a. Các thao tác nhập/xuất chuỗi đơn giản :
- Sử dụng hàm gets() là cách đơn giản nhất để nhập một chuỗi thông qua thiết bị nhập chuẩn. Các ký tự sẽ được nhập vào cho đến khi nhấn phím Enter. Hàm gets() thay thế ký tự kết thúc trở về đầu dòng '\n' bằng ký tự '\0'. Cú pháp hàm như sau:
gets(str); - Trong đó str là một mảng ký tự đã được khai báo.
- Tương tự, hàm puts() được sử dụng để hiển thị một chuỗi ra thiết bị xuất chuẩn. Ký tự xuống dòng sẽ kết thúc việc xuất chuỗi. Cú pháp hàm như sau:
puts(str); - Trong đó str là một mảng ký tự đã được khai báo và khởi tạo.
b. Các thao tác nhập/xuất chuỗi có định dạng :
- Có thể sử dụng các hàm scanf() và printf() để nhập và hiển thị các giá trị chuỗi. Các hàm này được dụng để nhập và hiển thị các kiểu dữ liệu hỗn hợp trong một câu lệnh duy nhất.Cú pháp như sau :
scanf("%s", str); - Trong đó ký hiện định dạng "%s" cho biết rằng một giá trị chuỗi sẽ được hiển thị và str là một mảng ký tự đã được khai báo và khởi tạo. Hàm printf() có thể dùng để hiển thị ra các thông báo mà không cần ký tự định đạng. Có thể sửa chương trình bên trên để nhập vào và hiển thị một tên, sử dụng ham scanf() và printf().
4. Các hàm về chuỗi
- C hỗ trợ rất nhiều hàm về chuỗi. Các hàm này có thể tìm thấy trong tập tin string.h. Một số thao tác mà các hàm này thực hiện là:
+ Nối chuỗi
+ So sánh chuỗi
+ Định vì một ký tự trong chuỗi
+ Sao chép một chuỗi sang chuỗi khác
+ Xác định chiều dài của chuỗi
- Những hàm này có thể thao khảo trực tiếp trên thư viện của C
5. Truyền mảng vào hàm
- Trong C, khi một mảng được truyền vào hàm như một tham số, thì chỉ có địa chỉ của mảng được truyền vào. Tên mảng không kèm theo chỉ số là địa chỉ của mảng. Đoạn mã dưới đây mô tả cách truyền địa chỉ của mảng ary cho hàm fn_ary():
void main()
{
int ary();
...
...
fn_arry();
...
...
} - Nếu tham số của hàm là một mảng một chiều thì tham số có thể được khai báo theo một trong các cách sau:
fn_ary (int ary[10]) /* sized array*/
{
:
}
hoặc
fn_ary (int ary[]) /* unsized array*/
{
:
} - Có hai cách khai báo ở trên đều cho cùng kết quả. Kiểu thứ nhất sử dụng cách khai báo mảng chuẩn, chỉ rõ ra kích thước của mảng. Kiểu thứ hai, chỉ ra rằng tham số là một mảng kiểu int có kích thước bất kỳ. Chương trình sau đây nhân các số vào một mảng số nguyên. Sau đó mảng này sẽ được truyền vào hàm sum_arr(). Hàm sẽ tính toán và trả về tổng của các số nguyên trong mảng.
6. Truyền chuỗi vào hàm
- Chuỗi, hay mảng ký tự, có thể được truyền vào hàm.
Hết bài 17
Bài tập tự làm
1. Viết một chương trình để nhập vào hai chuỗi. Chương trình sẽ xác định liệu chuỗi thứ nhất có xuất hiện ở cuối chuỗi thứ hai không.
2. Viết một chương trình nhập vào một mảng các số và hiển thị giá trị trung bình. Sử dụng hàm để tính giá trị trung bình.
- Các chuỗi trong C được cài đặt như là các mảng ký tự kết thúc bởi ký tự NULL ('\0'). Bài này sẽ thảo luận về công dụng và thao tác trên chuỗi.
1. Các biến và hằng kiểu chuỗi
- Các biến chuỗi sử dụng để lưu trữ một chuỗi các ký tự. Như các biến khác, các biến này phải được khai báo trước sử dụng. Một hằng chuỗi là một dãy các ký tự nằm trong dấu nháy kép. Mỗi ký tự trong một chuỗi được lưu trữ như là một phần tử của mảng. Ký tự "\0" (null) được tự động thêm vào trong cách biểu diễn bên trong của chuỗi để đánh dấu điểm kết thúc chuỗi. Vì vậy, khi khai báo một chuỗi, phải tăng kích thước của nó thêm một phần tử để chứa dữ liệu kết thúc null.
2. Con trỏ trỏ đến chuỗi
- Chuỗi có thể được lưu và truy cập bằng cách sử dụng con trỏ kiểu ký tự. Một con trỏ kiểu ký tự trỏ đến một chuỗi được khai báo như sau:
char *pstr = "WELCOME": -pstr là một con trỏ được khởi tạo để trỏ đến một hằng chuỗi. Con trỏ pstr có thể thay đổi đến bất kỳ một chuỗi nào khác. Mặc dù khi con trỏ pstr trỏ đến một chuỗi khác thì ta không thể truy xuất đến chuỗi "WELCOME" được nữa.
3. Các thao tác nhập xuất chuỗi
- Các thao tác nhập/xuất chuỗi (I/O) chuỗi trong C được thực hiện bằng cách gọi các hàm. Các hàm này là một phần của thư viện nhập/xuất chuẩn tên stdio.h. Một chương trình muốn sử dụng các hàm nhập/xuất chuỗi phải có câu lệnh khai báo như sau ở đầu chương trình:
#include <stdio.h>; - Khi chương trình có chứa câu lệnh này được biên dịch, thì nội dung của tập tin stdio.h sẽ trở thành một phần của chương trình.
a. Các thao tác nhập/xuất chuỗi đơn giản :
- Sử dụng hàm gets() là cách đơn giản nhất để nhập một chuỗi thông qua thiết bị nhập chuẩn. Các ký tự sẽ được nhập vào cho đến khi nhấn phím Enter. Hàm gets() thay thế ký tự kết thúc trở về đầu dòng '\n' bằng ký tự '\0'. Cú pháp hàm như sau:
gets(str); - Trong đó str là một mảng ký tự đã được khai báo.
- Tương tự, hàm puts() được sử dụng để hiển thị một chuỗi ra thiết bị xuất chuẩn. Ký tự xuống dòng sẽ kết thúc việc xuất chuỗi. Cú pháp hàm như sau:
puts(str); - Trong đó str là một mảng ký tự đã được khai báo và khởi tạo.
b. Các thao tác nhập/xuất chuỗi có định dạng :
- Có thể sử dụng các hàm scanf() và printf() để nhập và hiển thị các giá trị chuỗi. Các hàm này được dụng để nhập và hiển thị các kiểu dữ liệu hỗn hợp trong một câu lệnh duy nhất.Cú pháp như sau :
scanf("%s", str); - Trong đó ký hiện định dạng "%s" cho biết rằng một giá trị chuỗi sẽ được hiển thị và str là một mảng ký tự đã được khai báo và khởi tạo. Hàm printf() có thể dùng để hiển thị ra các thông báo mà không cần ký tự định đạng. Có thể sửa chương trình bên trên để nhập vào và hiển thị một tên, sử dụng ham scanf() và printf().
4. Các hàm về chuỗi
- C hỗ trợ rất nhiều hàm về chuỗi. Các hàm này có thể tìm thấy trong tập tin string.h. Một số thao tác mà các hàm này thực hiện là:
+ Nối chuỗi
+ So sánh chuỗi
+ Định vì một ký tự trong chuỗi
+ Sao chép một chuỗi sang chuỗi khác
+ Xác định chiều dài của chuỗi
- Những hàm này có thể thao khảo trực tiếp trên thư viện của C
5. Truyền mảng vào hàm
- Trong C, khi một mảng được truyền vào hàm như một tham số, thì chỉ có địa chỉ của mảng được truyền vào. Tên mảng không kèm theo chỉ số là địa chỉ của mảng. Đoạn mã dưới đây mô tả cách truyền địa chỉ của mảng ary cho hàm fn_ary():
void main()
{
int ary();
...
...
fn_arry();
...
...
} - Nếu tham số của hàm là một mảng một chiều thì tham số có thể được khai báo theo một trong các cách sau:
fn_ary (int ary[10]) /* sized array*/
{
:
}
hoặc
fn_ary (int ary[]) /* unsized array*/
{
:
} - Có hai cách khai báo ở trên đều cho cùng kết quả. Kiểu thứ nhất sử dụng cách khai báo mảng chuẩn, chỉ rõ ra kích thước của mảng. Kiểu thứ hai, chỉ ra rằng tham số là một mảng kiểu int có kích thước bất kỳ. Chương trình sau đây nhân các số vào một mảng số nguyên. Sau đó mảng này sẽ được truyền vào hàm sum_arr(). Hàm sẽ tính toán và trả về tổng của các số nguyên trong mảng.
6. Truyền chuỗi vào hàm
- Chuỗi, hay mảng ký tự, có thể được truyền vào hàm.
Hết bài 17
Bài tập tự làm
1. Viết một chương trình để nhập vào hai chuỗi. Chương trình sẽ xác định liệu chuỗi thứ nhất có xuất hiện ở cuối chuỗi thứ hai không.
2. Viết một chương trình nhập vào một mảng các số và hiển thị giá trị trung bình. Sử dụng hàm để tính giá trị trung bình.