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  [Chi u dài t char Ten[12]; ộ ớ ẽ ủ ộ n i  dung  c a  chu i  ký  t ự byte cu i cùng l u tr  ký t

 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 *;ế  Ví d :ụ

ể ư

ữ ị

ỉ ớ ẽ  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 ế []=<”H ng chu i”>;

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