Lp trình căn bn
Chương VIII: CHUI KÝ T
Hc xong chương này, sinh viên s nm được các vn đề sau:
Khái nim v chui ký t.
Mt s hàm x lý chui và ng dng ca chúng trong thc tế.
I. KHÁI NIM
Chui ký t là mt dãy gm các ký t hoc mt mng các ký t được kết thúc
bng ký t ‘\0’ (còn được gi là ký t NULL trong bng mã Ascii).
Các hng chui ký t được đặt trong cp du nháy kép “”.
II. KHAI BÁO
II.1 Khai báo theo mng
Cú pháp: char <Biến> [Chiu dài ti đa]
d: Trong chương trình, ta có khai báo:
char Ten[12];
Trong khai báo này, b nh s cung cp 12+1 bytes để lưu tr ni dung
ca chui ký t Ten; byte cui cùng lưu tr ký t ‘\0’ để chm dt chui.
Ghi chú:
- Chiu dài ti đa ca biến chui là mt hng nguyên nm trong khong t 1
đến 255 bytes.
- Chiu dài ti đa không nên khai báo tha để tránh lãng phí b nh, nhưng
cũng không nên khai báo thiếu.
II.2 Khai báo theo con tr
Cú pháp: char *<Biến>
Ví d: Trong chương trình, ta có khai báo:
char *Ten;
Trong khai báo này, b nh s dành 2 byte để lưu tr địa ch ca biến
con tr Ten đang ch đến, chưa cung cp nơi để lưu tr d liu. Mun có ch để lưu
tr d liu, ta phi gi đến hàm malloc() hoc calloc() có trong “alloc.h”, sau đó mi
gán d liu cho biến.
II.3 Va khai báo va gán giá tr
Cú pháp: char <Biến>[]=<”Hng chui”>
Ví d:
#include<stdio.h>
#include<conio.h>
int main()
{
char Chuoi[]="Mau nang hay la mau mat em” ;
Trang 92
Lp trình căn bn
printf("Vua khai bao vua gan tr : %s”,Chuoi) ;
getch();
return 0;
}
* Ghi chú: Chui được khai báo là mt mng các ký t nên các thao tác trên
mng có th áp dng đối vi chui ký t.
III. CÁC THAO TÁC TRÊN CHUI KÝ T
III.1. Nhp xut chui
III.1.1 Nhp chui t bàn phím
Để nhp mt chui ký t t bàn phím, ta s dng hàm gets()
pháp: gets(<Biến chui>)
d: char Ten[20];
gets(Ten);
Ta cũng có th s dng hàm scanf() để nhp d liu cho biến chui, tuy nhiên
lúc này ta ch có th nhp được mt chui không có du khong trng.
Ngoài ra, hàm cgets() (trong conio.h) cũng được s dng để nhp chui.
III.1.2 Xut chui lên màn hình
Để xut mt chui (biu thc chui) lên màn hình, ta s dng hàm puts().
pháp: puts(<Biu thc chui>)
d: Nhp vào mt chui và hin th trên màn hình chui va nhp.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Ten[12];
printf("Nhap chuoi: ");gets(Ten);
printf("Chuoi vua nhap: ");puts(Ten);
getch();
return 0;
}
Ngoài ra, ta có th s dng hàm printf(), cputs() (trong conio.h) để hin th
chui lên màn hình.
III.2 Mt s hàm x lý chui (trong string.h)
III.2.1 Cng chui - Hàm strcat()
Cú pháp: char *strcat(char *des, const char *source)
Hàm này có tác dng ghép chui ngun vào chui đích.
Ví d: Nhp vào h lót và tên ca mt người, sau đó in c h và tên ca h lên
màn hình.
#include<conio.h>
#include<stdio.h>
#include<string.h>
Trang 93
Lp trình căn bn
int main()
{
char HoLot[30], Ten[12];
printf("Nhap Ho Lot: ");gets(HoLot);
printf("Nhap Ten: ");gets(Ten);
strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/
printf("Ho ten la: ");puts(HoLot);
getch();
return 0;
}
III.2.2 Xác định độ dài chui - Hàm strlen()
Cú pháp: int strlen(const char* s)
Ví d: S dng hàm strlen xác định độ dài mt chui nhp t bàn phím.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main(){
char Chuoi[255];
int Dodai;
printf("Nhap chuoi: ");gets(Chuoi);
Dodai = strlen(Chuoi)
printf("Chuoi vua nhap: ");puts(Chuoi);
printf(“Co do dai %d”,Dodai);
getch();
return 0;
}
III.2.3 Đổi mt ký t thường thành ký t hoa - Hàm toupper()
Hàm toupper() (trong ctype.h) được dùng để chuyn đổi mt ký t thường
thành ký t hoa.
Cú pháp: char toupper(char c)
III.2.4 Đổi chui ch thường thành chui ch hoa, hàm strupr()
Hàm struppr() được dùng để chuyn đổi chui ch thường thành chui ch hoa,
kết qu tr v ca hàm là mt con tr ch đến địa ch chui được chuyn đổi.
Cú pháp: char *strupr(char *s)
Ví d: Viết chương trình nhp vào mt chui ký t t bàn phím. Sau đó s dng
hàm strupr() để chuyn đổi chúng thành chui ch hoa.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255],*s;
printf("Nhap chuoi: ");gets(Chuoi);
s=strupr(Chuoi) ;
printf(“Chuoi chu hoa: ”);puts(s);
getch();
return 0;
}
Trang 94
Lp trình căn bn
III.2.5 Đổi chui ch hoa thành chui ch thường, hàm strlwr()
Mun chuyn đổi chui ch hoa thành chui toàn ch thường, ta s dng hàm
strlwr(), các tham s ca hàm tương t như hàm strupr()
Cú pháp: char *strlwr(char *s)
III.2.6 Sao chép chui, hàm strcpy()
Hàm này được dùng để sao chép toàn b ni dung ca chui ngun vào chui
đích.
Cú pháp: char *strcpy(char *Des, const char *Source)
Ví d: Viết chương trình cho phép chép toàn b chui ngun vào chui đích.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255],s[255];
printf("Nhap chuoi: ");gets(Chuoi);
strcpy(s,Chuoi);
printf(“Chuoi dich: ”);puts(s);
getch();
return 0;
}
III.2.7 Sao chép mt phn chui, hàm strncpy()
Hàm này cho phép chép n ký t đầu tiên ca chui ngun sang chui đích.
Cú pháp: char *strncpy(char *Des, const char *Source, size_t n)
III.2.8 Trích mt phn chui, hàm strchr()
Để trích mt chui con ca mt chui ký t bt đầu t mt ký t được ch định
trong chui cho đến hết chui, ta s dng hàm strchr().
Cú pháp : char *strchr(const char *str, int c)
Ghi chú:
- Nếu ký t đã ch định không có trong chui, kết qu tr v là NULL.
- Kết qu tr v ca hàm là mt con tr, con try ch đến ký t c được tìm
thy đầu tiên trong chui str.
III.2.9 Tìm kiếm ni dung chui, hàm strstr()
Hàm strstr() được s dng để tìm kiếm s xut hin đầu tiên ca chui s2 trong
chui s1.
Cú pháp: char *strstr(const char *s1, const char *s2)
Kết qu tr v ca hàm là mt con tr ch đến phn t đầu tiên ca chui s1 có
cha chui s2 hoc giá tr NULL nếu chui s2 không có trong chui s1.
Ví d: Viết chương trình s dng hàm strstr() để ly ra mt phn ca chui gc
bt đầu t chui “hoc”.
#include<conio.h>
#include<stdio.h>
#include<string.h>
Trang 95
Lp trình căn bn
int main()
{
char Chuoi[255],*s;
printf("Nhap chuoi: ");gets(Chuoi);
s=strstr(Chuoi,”hoc”);
printf(“Chuoi trich ra: ”);puts(s);
getch();
return 0;
}
III.2.10 So sánh chui, hàm strcmp()
Để so sánh hai chui theo tng ký t trong bng mã Ascii, ta có th s dng
hàm strcmp().
Cú pháp: int strcmp(const char *s1, const char *s2)
Hai chui s1 và s2 được so sánh vi nhau, kết qu tr v là mt s nguyên (s
này có được bng cách ly ký t ca s1 tr ký t ca s2 ti v trí đầu tiên xy ra s
khác nhau).
- Nếu kết qu là s âm, chui s1 nh hơn chui s2.
- Nếu kết qu là 0, hai chui bng nhau.
- Nếu kết qu là s dương, chui s1 ln hơn chui s2.
III.2.11 So sánh chui, hàm stricmp()
Hàm này thc hin vic so sánh trong n ký t đầu tiên ca 2 chui s1 và s2,
gia ch thường và ch hoa không phân bit.
Cú pháp: int stricmp(const char *s1, const char *s2)
Kết qu tr v tương t như kết qu tr v ca hàm strcmp()
III.2.12 Khi to chui, hàm memset()
Hàm này được s dng để đặt n ký t đầu tiên ca chui là ký t c.
Cú pháp: memset(char *Des, int c, size_t n)
III.2.13 Đổi t chui ra s, hàm atoi(), atof(), atol() (trong stdlib.h)
Để chuyn đổi chui ra s, ta s dng các hàm trên.
Cú pháp : int atoi(const char *s) : chuyn chui thành s nguyên
long atol(const char *s) : chuyn chui thành s nguyên dài
float atof(const char *s) : chuyn chui thành s thc
Nếu chuyn đổi không thành công, kết qu tr v ca các hàm là 0.
Ngoài ra, thư vin string.h còn h tr các hàm x lý chui khác, ta có th đọc
thêm trong phn tr giúp.
Trang 96