LẬP TRÌNH CĂN BẢN
Phần 2 - Chương 8 CHUỖI KÝ TỰ N.C. Danh
1
ộ
ươ
N i dung ch
ng này
ỗ
ự
Khái ni mệ Khai báo Các thao tác trên chu i ký t
2
Khái niệm
ự
ồ
ỗ Chu i ký t
là m t dãy g m các ký t
ho c m t
ằ
ự ặ ự
ự
ả
ộ đ
c k t thúc b ng ký t
ộ ‘\0’ (ký t
ự ượ ế m ng các ký t ả NULL trong b ng mã Ascii). ỗ
ặ
ấ
Các h ng chu i ký t
ự ượ đ
ặ c đ t trong c p d u nháy
ằ kép “”.
3
Khai báo
ừ
ừ
Khai báo theo m ngả Khai báo theo con trỏ ị V a khai báo v a gán giá tr
4
Khai báo theo m ngả
Cú pháp:
Ví d : ụ
ố ề ế i đa];
ể ư Ten;
ỗ ữ
ư
ố
ể ấ
ứ
=> b nh s cung c p 12+1 bytes đ l u tr ữ ấ
ự ỗ ‘\0’ đ ch m d t chu i
Ten:
‘\0’
Ten[0]
Ten[12]
char
Ghi chú: ế ề Chi u dài t ớ ừ ể Không nên khai báo th a đ tránh lãng phí b nh .
ủ ỗ ố
i đa c a bi n chu i: 1..255 bytes. ộ 5
Khai báo theo con trỏ
Cú pháp: char *
ể ư
ữ ị
ộ
ỉ ớ ẽ Trong khai báo này, b nh s dành 2 byte đ l u tr đ a ch
ỏ
ế
ỉ ế ữ ữ ệ
ơ ể ư
ấ ỗ ể ư
ả ọ ế
ữ ữ ệ
ư ố
ủ c a bi n con tr Ten đang ch đ n. Ch a cung c p n i đ l u tr d li u. Mu n có ch đ l u tr d li u, ta ph i g i đ n hàm
ớ
ệ
ế
ữ malloc() ho c ặ calloc() có trong “alloc.h”, sau đó m i gán d li u cho bi n.
Tieu Dong Tu
6
char *Ten;
ừ
ừ
ị V a khai báo v a gán giá tr
Cú pháp:
Ví d :ụ
Vua khai bao vua gan trị : Mau nang hay la mau mat em
ự
nên các thao
Ghi chú: Chu i đ
ộ c khai báo là m t m ng các ký t ố ớ
ả ỗ
ự
ụ
ả
tác trên m ng có th áp d ng đ i v i chu i ký t
.
ỗ ượ ể
7
ỗ ằ char
ỗ
ự
Các thao tác trên chu i ký t
ậ
ấ
ỗ ừ ậ
ỗ Nh p xu t chu i Nh p chu i t bàn phím
Xu t chu i lên màn hình ỗ
ấ ộ ố
ỗ
ử
M t s hàm x lý chu i (trong string.h)
8
ỗ ừ
ậ
Nh p chu i t
bàn phím
Dùng hàm gets() Cú pháp:
Ví d : ụ
ỗ ế
gets(
char Ten[20]; gets(Ten);
ể ử ụ ể
Ta cũng có th s d ng hàm scanf() đ nh p d li u cho ộ c m t
ậ ữ ệ ậ ượ ế ể ỗ
Dùng hàm cgets() (trong conio.h)
9
ắ ỗ ỉ bi n chu i, tuy nhiên lúc này ta ch có th nh p đ ả ấ chu i không có d u kho ng tr ng.
ỗ
ấ
Xu t chu i lên màn hình
ỗ
ộ
ấ
ể
ử ụ
ứ
ỗ
Đ xu t m t chu i (bi u th c chu i) lên màn hình, ta s d ng hàm
ứ
ỗ
ể
puts(
ỗ ừ
ậ
ậ
ộ
ể puts(). Cú pháp: ể Ví d :ụ Nh p vào m t chu i và hi n th trên màn hình chu i v a nh p:
ể ử ụ
ể ể
Ngoài ra, ta có th s d ng hàm printf(), cputs() (trong conio.h) đ hi n
ị
ỗ
th chu i lên màn hình.
10
ỗ
ử ộ ố M t s hàm x lý chu i (trong string.h)
ộ
toupper()
ỗ ỗ ổ ổ ổ ng, hàm
ầ ỗ
ộ ỗ strchr()
ế strstr()
ỗ strcmp() stricmp()
ỗ memset()
11
ở ạ ổ ừ ỗ ỗ C ng chu i Hàm strcat() ỗ ộ ị Xác đ nh đ dài chu i Hàm strlen() ự ự ườ ộ Đ i m t ký t ng thành ký t hoa Hàm th ữ hoa, hàm strupr() ỗ ữ ườ Đ i chu i ch th ng thành chu i ch ườ ữ th ỗ ữ Đ i chu i ch hoa thành chu i ch strlwr() ộ Sao chép m t ph n chu i, hàm strncpy() ầ Trích m t ph n chu i, hàm ộ Tìm ki m n i dung chu i, hàm ỗ So sánh chu i, hàm ỗ So sánh chu i, hàm Kh i t o chu i, hàm Đ i t chu i ra s , hàm atoi(), atof(), atol() (trong stdlib.h) ố
(1)
ộ
ỗ C ng chu i strcat()
Cú pháp:
char *strcat(char *des, const char *source)
Hàm này có tác d ng ghép chu i ngu n (source) vào chu i
ụ ồ ỗ ỗ
12
đích (des). ả ể ỗ ế ả ỏ ỉ ế Tr v con tr ch đ n chu i k t qu .
(2)
ộ
ỗ C ng chu i strcat()
ủ
ộ
ườ
i,
ậ ả ọ
ủ ọ
ọ Ví dụ: Nh p vào h lót và tên c a m t ng sau đó in c h và tên c a h lên màn hình.
13
ỗ
ộ
ị
Xác đ nh đ dài chu i strlen()
int strlen(const char* s) ỗ
ậ ừ
ị
bàn
Cú pháp: ộ Ví dụ: Xác đ nh đ dài 1 chu i nh p t
phím.
14
ự
ổ ộ
ự ườ th
ng thành ký t
Đ i m t ký t hoa toupper()
Cú pháp:
char toupper(char c)
ể
ể c dùng đ chuy n ự
Hàm này (trong ctype.h) đ ự ườ th
ượ ng thành ký t
ổ đ i 1 ký t
hoa.
15
ổ
ng thành
ữ ườ ỗ Đ i chu i ch th ữ hoa strupr() (1) chu i chỗ
Cú pháp:
char *strupr(char *s)
Hàm này đ ữ ỗ
ượ ữ ườ ể ể ổ ỗ c dùng đ chuy n đ i chu i ch th ng thành
chu i ch hoa.
K t qu tr v là 1 con tr ch đ n chu i k t qu
16
ả ả ề ỏ ỉ ế ỗ ế ế ả.
ổ
ng thành
ữ ườ ỗ Đ i chu i ch th ữ hoa strupr() (2) chu i chỗ
ậ ự ừ t
Ví dụ: Nh p vào m t chu i ký t ổ ụ d ng hàm strupr() đ chuy n đ i chúng thành chu i ch hoa.
17
ử bàn phím. Sau đó s ữ ỗ ể ộ ể ỗ
ỗ
ỗ ườ
ổ Đ i chu i ch hoa thành chu i chữ th
ữ ng strl
wr()
Cú pháp:
char *strlwr(char *s)
Hàm này đ ỗ
ữ ể ể ỗ ổ c dùng đ chuy n đ i chu i ch hoa thành
ượ ữ ườ chu i ch th ng.
K t qu tr v là 1 con tr ch đ n chu i k t qu
18
ả ả ề ỏ ỉ ế ỗ ế ế ả.
(1)
ỗ
Sao chép chu i strcpy()
Cú pháp:
char *strcpy(char *Des, const char *Source)
Hàm này đ ồ
ộ ộ ủ ể ỗ
19
c dùng đ sao chép toàn b n i dung c a chu i ỗ ượ ngu n vào chu i đích.
(2)
ỗ
Sao chép chu i strcpy()
ế ồ ộ ỗ ng trình cho phép chép toàn b chu i ngu n
20
ươ Ví dụ: Vi t ch ỗ vào chu i đích
ỗ ỗ
ộ ộ
ầ Sao chép m t ph n chu i strncpy() ầ và Trích m t ph n chu i strchr()
ầ
ỗ ộ Sao chép m t ph n chu i
Cú pháp:
char *strncpy(char *Des, const char *Source, size_t n) ỗ
ự ầ
ủ
ồ
ỗ
đ u tiên c a chu i ngu n sang chu i đích.
Chép n ký t
ầ
ỗ
ộ
Trích m t ph n chu i, hàm strchr()
Cú pháp :
char *strchr(const char *str, int c)
ắ ầ ừ
ủ
ỗ
ự
ế
ế
ỗ
ký t
c cho đ n h t chu i.
Trích ra chu i con c a str b t đ u t Ghi chú:
ự
ế
ỗ
c không có trong chu i, k t qu tr v là NULL.
ả ả ề ỏ
ỉ ế
ỏ
ự c
ế N u ký t ộ ế K t qu tr v c a hàm là m t con tr , con tr này ch đ n ký t ầ
ả ả ề ủ ỗ đ u tiên trong chu i str.
21
ế
ỗ
ộ
Tìm ki m n i dung chu i strstr() (1)
Cú pháp:
char *strstr(const char *s1, const char *s2)
ể
ự ấ
ệ
ầ
Hàm này đ
c dùng đ tìm ki m s xu t hi n đ u
ủ
ượ ỗ
ế tiên c a chu i s2 trong chu i s1.
ầ ử ầ
ả ả ỗ ỗ
ặ ỗ
ỗ ế ỏ ỉ ế K t qu tr là 1 con tr ch đ n ph n t đ u tiên ị ỗ ứ ủ c a chu i s1 có ch a chu i s2 ho c giá tr NULL ế n u chu i s2 không có trong chu i s1.
22
ế
ỗ
ộ
Tìm ki m n i dung chu i strstr() (2)
Ví dụ: Vi ầ ủ
ể ấ ế ộ t ch
23
ử ụ ươ ỗ ố ắ ầ ừ ph n c a chu i g c b t đ u t ng trình s d ng hàm strstr() đ l y ra m t ỗ hoc”. chu i “
(1)
ỗ So sánh chu i strcmp()
Cú pháp:
So sánh 2 chuỗi s1 và s2 với nhau. Kết quả trả về là 1 số int: <0 nếu s1 < s2 ==0 nếu s1==s2 >0 nếu s1 > s2
int strcmp(const char *s1, const char *s2)
T
ườ
ự
ệ
ươ ự :
So sánh không phân bi
hoa/th
ng
24
ng t int stricmp(const char *s1, const char *s2) t kí t
(2)
ỗ So sánh chu i strcmp()
Ví dụ:
#include
#include
#include
#include
#inlude
#inlude
void main(){
void main(){
char s1[10]=“Chao”, s2[10]=“chao”;
char s1[10]=“chao”, s2[10]=“chao”;
printf(“%d”,strcmp(s1,s2));
printf(“%d”,strcmp(s1,s2));
getch();
getch();
}
}
0
-32
25
ở ạ
ỗ Kh i t o chu i memset()
Cú pháp: void *memset(char *Des, int c, size_t n) ỗ
ự ầ
ự
ủ
đ u tiên c a chu i Des là ký t
c.
ị ả ề
ằ
ặ Đ t n ký t ỗ Giá tr tr v : chu i Des. ư ệ N m trong th vi n: string.h và mem.h
26
ổ ừ
ỗ
ố
chu i ra s atoi(), atof(),
Đ i t atol() (trong stdlib.h)
Cú pháp :
ể ố ỗ int atoi(const char *s) : chuy n chu i thành s nguyên
ỗ ỗ
ổ
ả ả N u chuy n đ i không thành công, k t qu tr
ể ế ề ủ v c a các hàm là 0. Ví d :ụ
ố ể long atol(const char *s) : chuy n chu i thành s nguyên dài ố ự ể float atof(const char *s) : chuy n chu i thành s th c ế
27
atoi(“1234”)=> 1234
Hết chương
28