CHƯƠNG 7 CHƯƠNG 7 CHUỔI KÝ TỰ CHUỔI KÝ TỰ (String) (String) (String) (String)
1. Giới thiệu 1. Giới thiệu 1. Giới thiệu 1. Giới thiệu
(cid:121) Chuổi là một mảng ký tự được kết thúc
g ý ự ợ
(cid:121) Hằng chuổi là chuổi được bao quanh bởi (cid:121) Hằng chuổi là chuổi được bao quanh bởi
ộ bằng ký tự null (‘\0’). Ký tự null ( \0 ) là ký tự dùng để kết (cid:121) Ký tự null (‘\0’) là ký tự dùng để kết thúc chuổi
cặp dấu nháy đôi. Ví dụ: "Hello"
2. 2. KhaiKhai báobáo vàvà khởi 2.2. KhaiKhai báobáo vàvà khởi
chuổi khởi tạotạo chuổi khởi tạotạo chuổi chuổi
ạ
Có 2 cách khai báo và khởi tạo chuổi (cid:121) Cách 1: Dùng mảng một chiều
char [Chiều dài tối đa]
[Chiề dài tối đ ]
Tê biế
h
char str[12]; h
ữ ộ
(cid:121) Ví dụ: t [12] Ví d Trong khai báo này, bộ nhớ sẽ cung cấp 12+1 bytes để lưu trữ nội dung ể ấ của chuỗi ký tự str; byte cuối cùng lưu trữ ký tự ‘\0’ để kết thúc chuỗi. ‘\ ’ để kế hú
ữ ký h ỗ
2. 2. KhaiKhai báobáo vàvà khởi
ạạ khởi tạotạo chuổi chuổi..
Cách 2: Dùng con trỏ g
char *
(cid:121)Vídụ: char *str;
à kh i bá
ấ
T Trong khai báo này, bộ nhớ sẽ dành 2 bộ hớ ẽ dà h 2 byte để lưu trữ địa chỉ của biến con trỏ str đang chỉ đến, chưa cung cấp nơi để ơi để hư hỉ đế t đ lưu trữ dữ liệu.
2. 2. KhaiKhai báobáo vàvà khởi 2.2. KhaiKhai báobáo vàvà khởi
chuổi.. khởi tạotạo chuổi khởi tạotạo chuổi chuổi..
g ý ự g g
(cid:121) Chuổi ký tự giống như mảng do đó để khởi tạo một chuổi ký tự với những giá trị xác định ta có thể thực hiện tương tự g ự như với mảng.
ự ệ ị ị
char [ ]=<”Hằng chuổi ”>
2. 2. KhaiKhai báobáo vàvà khởi 2.2. KhaiKhai báobáo vàvà khởi
chuổi.. khởi tạotạo chuổi khởi tạotạo chuổi chuổi..
(cid:121) Ví dụ:ụ
char str[] = {‘H’, ’e’, ’l’, ’l’, ’o’, ’\0’}; char str[] = Hello ; char str[] = “Hello”; char *str = “Hello”;
chuổi 3.3. NhậpNhập chuổi 3. 3. NhậpNhập chuổi chuổi
ập g (cid:121) Để nhập dữ liệu cho biến chuổi, ta dùng ệ
, hàm gets() của thư viện stdio.h.
char *gets(char *s); char *gets(char *s); t ( h * ) t ( h * )
h * h *
(cid:121) Hàm gets() đọc các ký tự từ bàn phím (cid:121) Hàm gets() đọc các ký tự từ bàn phím vào trong mảng trỏ đến bởi s cho đến khi nhấn Enter. Ký tự null sẽ được đặt khi nhấn Enter Ký tự null sẽ được đặt sau ký tự cuối cùng của chuổi nhập vào trong mảng. trong mảng
(cid:121) Hoặc ta có thể dùng cin >> s;
chuổi 4.4. XuấtXuất chuổi 4. 4. XuấtXuất chuổi chuổi
(cid:121) Để xuất chuổi ra màn hình, ta dùng hàm
g
, puts() của thư viện stdio.h.
int puts(const char *s); int puts(const char *s);
(cid:121) Hoặc ta có thể dùng cout (cid:121) Hoặc ta có thể dùng cout
(cid:121) cout << s;
VíVí dụdụ:: VíVí dụdụ::
#include
char str[20]; cout<<"nhap chuoi:"; cout<<"nhap chuoi:"; gets(str); cout<< \nXuat chuoi: ; cout<<"\nXuat chuoi:"; puts(str); return 0; return 0;
}
5. 5. CácCác hàmhàm thao 5.5. CácCác hàmhàm thao
chuổi thao táctác trêntrên chuổi thao táctác trêntrên chuổi chuổi
(cid:121) strcpy(s1, s2): Sao chép chuổi s2 vào s1 í dVí dụ:
#include
t
char str1[20], str2[20]; cout<<"nhap chuoi 1:"; gets(str1); t ( t 1) h i 1 " " h strcpy(str2,str1); cout<< \nXuat chuoi 2: ; puts(str2); cout<<"\nXuat chuoi 2:"; puts(str2);
}
5. 5. CácCác hàmhàm thao 5.5. CácCác hàmhàm thao
chuổi thao táctác trêntrên chuổi thao táctác trêntrên chuổi chuổi
(cid:121) strcat(s1, s2): Nối chuổi s2 vào cuối chuổi s1
Ví dụ:
Ví d :
#include
char str1[20], str2[20]; cout<<"nhap chuoi 1:"; gets(str1); cout<<"\nhap chuoi 2:"; gets(str2); cout<<"\nhap chuoi 2:"; gets(str2); strcat(str1,str2); cout<<"\nXuat chuoi sau khi noi:"; puts(str1);
}
5. 5. CácCác hàmhàm thao 5.5. CácCác hàmhàm thao
chuổi thao táctác trêntrên chuổi thao táctác trêntrên chuổi chuổi
(cid:121) strchr(s1, ch) : Trả về con trỏ đến vị trí xuất hiện đầu tiên của ký tự ch trong chuổi s1 ch t ong ch ổi s1
ất hiện đầ tiên của ký t Ví dụ: void main() void main() {
char *p, h, str1[20]; cout<<"nhap chuoi 1:”; gets(str1); cout<<"Nhap ktu muon tim:"; cin>>h; p= strchr(str1,h); p= strchr(str1 h); if(p==NULL) cout<<"Khong tim thay "; else cout<<"Tim thay tai vi tri "<<(p-str1);
}
5. 5. CácCác hàmhàm thao 5.5. CácCác hàmhàm thao
chuổi thao táctác trêntrên chuổi thao táctác trêntrên chuổi chuổi
(cid:121) strstr(s1, s2): Trả về con trỏ đến vị trí xuất hiện
ổ
đầu tiên của chuổi s2 trong s1. ầ Ví dụ: void main() *
{ {
[
char *p, str1[20], str2[20]; h ] ] [ cout<<"nhap chuoi 1:"; gets(str1); cout<< nhap chuoi 2: ; gets(str2); cout<<"nhap chuoi 2:"; gets(str2); p= strstr(str1,str2); NULL) if(p==NULL) if(p
cout<<"Khong tim thay ";
else
cout<<"Tim thay tai vi tri "<<(p-str1);
}
chuổi 6.6. MảngMảng cáccác chuổi 6. 6. MảngMảng cáccác chuổi chuổi
(cid:121) Mảng các chuổi
ộ g g ý ự
là một mảng ký tự hai chiều. Kích thước của chỉ mục thứ nhất là số chuổi và kích thước của chỉ mụcụ thứ hai xác định chiều dài lớn nhất của mỗi chuổi. Ví dụ: char str[5][80]; Khai báo một mảng của 5 chuổi, mỗi Khai báo một mảng của 5 chuổi mỗi chuổi có chiều dài tối đa là 79 ký tự.
chuổi 6.6. MảngMảng cáccác chuổi 6. 6. MảngMảng cáccác chuổi chuổi
(cid:121) Khai báo và khởi tạo mảng các chuổi
g ạ
char arrayList[][length] = {
constantString1, constantString2,
...
constantStringN};
(cid:121) Ví dụ: ụ
char listOfPL[][10] = {“Pascal”, “C++”, “C#”};
chuổi 6.6. MảngMảng cáccác chuổi 6. 6. MảngMảng cáccác chuổi chuổi
Ví dụ:
void main() {
char list[5][20]; h li t[5][20] for(int i=0; i<5; i++) {{
cout<<"name"<>list[i];
}} for(int j=0; j<5; j++)
cout<< < } ổ ể (cid:121) Ngoài cách dùng mảng ký tự hai chiều để lưu
trữ mảng các chuổi, ta có thể dùng mảng của
các con trỏ. Mỗi con trỏ sẽ chứa địa chỉ của
chuổi
chuổi
(cid:121) Ví dụ: char *str[20];
h
* t [20] void main()
{{ char *name[5];
for(int i=0 ; i<5 ; i++) name[i] = (char *)malloc(20); for(int i=0 ; i<5 ; i++)
{{ cout << "Input name " << i+1 <<": ";
gets(name[i]);
gets(name[i]); o a }
cout << "List of names: ";
;
ou
for(int i=0 ; i<5 ; i++)
cout << name[i] << ", "; }
chuổi
7.7. MảngMảng concon trỏtrỏ đếnđến cáccác chuổi
con trỏtrỏ đếnđến cáccác chuổi
7. 7. MảngMảng con
chuổi