1 / 30

C8: Chuỗi ký tự

C8: Chuỗi ký tự. Khái niệm Khai báo Các thao tác trên chuỗi Con trỏ và các hàm trên chuỗi. 1. Khái niệm. Chuỗi ký tự là một dãy gồm các ký tự hoặc một mảng các ký tự được kết thúc bằng ký tự ‘’ Các hằng ký tự được đặt trong dấu ngặc kép “” Ví dụ: Chuỗi “Chao ban”. 2. Khai báo.

elke
Download Presentation

C8: Chuỗi ký tự

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C8: Chuỗi ký tự • Khái niệm • Khai báo • Các thao tác trên chuỗi • Con trỏ và các hàm trên chuỗi

  2. 1. Khái niệm • Chuỗi ký tự là một dãy gồm các ký tự hoặc một mảng các ký tự được kết thúc bằng ký tự ‘\0’ • Các hằng ký tự được đặt trong dấu ngặc kép “” • Ví dụ: Chuỗi “Chao ban”

  3. 2. 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: char <biến>[chiềuDàiTốiĐa]; • Ví dụ: char hoten[30]; • Lưu ý: • ChiềuDàiTốiĐa của biến là hằng số: 1 đến 255 byte. • Số byte được cấp trong bộ nhớ để lưu biến là ChiềuDàiTốiĐa + 1

  5. Khai báo theo con trỏ • Cú pháp: char*<biến>; • Ví dụ: char *<hoten>; Bộ nhớ sẽ dành 2 byte để lưu trữ địa chỉ của biến con trỏ

  6. Vừa khai báo vừa gán giá trị • Cú pháp: char<biến>[]=<“hằng”>; • Ví dụ: char tenbai[]=“Nhat ky trong tu”;

  7. 3. Các thao tác trên chuỗi • Nhập – xuất • Truy xuất từng ký tự

  8. Nhập – xuất • Cú pháp: cin.get<biến>; Nhập 1 ký tự từ bàn phím cin.get(); Chờ nhận 1 ký tự từ bàn phím cin.getline(st,n); Nhập vào biến st (st là mảng ký tự) n-1 ký tự. Nếu nhập hơn thì số nhiều hơn sẽ ở trên vùng đệm. Có thể dùng cin để nhập ký tự hoặc chuỗi ký tự nhưng nó không cho phép nhập ký tự trắng hoặc chuỗi có ký tự trắng.

  9. cin.ignore(int n,‘\n’); Bỏ qua tối đa n trong vùng đệm hoặc khi gặp phím enter ‘\n’ thì kết thúc cin. • fflush(stdin); • Số ký tự tối đa nhập được cho một biến là 127

  10. Ví dụ #include <iostream.h> #include <conio.h> #include <iomanip.h> #include <stdlib.h> void main() { const int MAX=5; char a[MAX], b[MAX]; clrscr(); cout<<"nhap mot chuoi”; cin.getline(a,5); cin.ignore(100,'\n'); cout<<"nhap mot chuoi “;cin.getline(b,5); cout<<a<<” “<<b; getch(); } abcdefgh ijmonopq abcd ijmo

  11. Truy xuất từng ký tự trong chuỗi • Do chuỗi là mảng ký tự, vậy có thể truy xuất chuỗi thông qua chỉ số như truy xuất từng phần tử của mảng

  12. Ví dụ int vowels(char str[]) { int count=0,i=0; while(str[i]!='\0') { switch(str[i]) { case 'a': case 'e': case 'i': case 'o': case 'u':count++; } i++; } return count; } #include<iostream.h> #include<conio.h> #include<string.h> int vowels(char str[]); void main() { const int MAX=80; char st[MAX]; clrscr(); cout<<"nhap mot chuoi"; cin.getline(st,MAX); cin.ignore(100,'\n'); cout<<“so ky tu nguyen am la:“; cout<<vowels(st); getch(); }

  13. Ví dụ #include <iostream.h> #include <conio.h> #include <string.h> void main() { const int MAX=80; char st[MAX],c; int i=0; clrscr(); cout<<"nhap mot chuoi\n"; while(i<MAX&&(c=cin.get())!='\n') st[i++]=c; st[i]='\0'; cout<<"Chuoi vua nhap la: "<<st; getch(); }

  14. 4. Con trỏ và các hàm trên chuỗi • Con trỏđặc biệt hữu ích trong việc xây dựng các hàm xử lý chuỗi. • Sử dụng con trỏ truy xuất chuỗi thay vì dùng chỉ số thì chương trình sẽ cô đọng hơn

  15. Các hàm thư viện xử lý chuỗi#include <string.h> strcat: ghép chuỗi char *strcat(char *s_nhan, char *s); Bổ sung chuỗi s vào sau chuỗi s_nhan strchr: Tìm lần xuất hiện đầu tiên của ký tự trong chuỗi char *strchr(char *s, int kt); Nếu có cho địa chỉ của ký tự, nếu không cho NULL strrchr: Tìm lần xuất hiện cuối cùng của ký tự trong chuỗi char *strrchr(char *s, int kt); Nếu có cho địa chỉ của ký tự, nếu không cho NULL 15

  16. Ví dụDùng hàm strcat để ghép chuỗi. #include <string.h> #include <iostream.h> #include <conio.h> int main() { clrscr(); char s_nhan[50]; char *s1 = "TOI DI"; char *s2 = "XEM PHIM"; strcat(s_nhan, s1); strcat(s_nhan, s2); cout << s_nhan; getch(); return 0; } 16

  17. Các hàm thư viện xử lý chuỗi strcmp: So sánh 2 chuỗi (có phân biệt chữ hoa, chữ thường) int strcmp(char *s1, char *s2); giá trị âm nếu chuỗi s1 nhỏ hơn chuỗi s2 giá trị 0 nếu chuỗi s1 bằng chuỗi s2 giá trị dương nếu chuỗi s1 lớn hơn chuỗi s2 strcmpi: So sánh 2 chuỗi (không phân biệt chữ hoa, chữ thường) int strcmpi(char *s1, char *s2); Chương 3: Các thành phàn cơ bản 17

  18. Các hàm thư viện xử lý chuỗi strcpy: sao chuỗi char strcpy( char *s_nhan, *s_gui); Cho chuỗi s_gui vào vùng s_nhan strcspn: tìm độ dài đoạn đầu chuỗi int strcspn(char *s, char *s_con); Cho độ dài đoạn đầu của s, mà mọi ký tự của đoạn không có mặt trong chuỗi s_con strspn: Cho độ dài đoạn đầu của chuỗi int strspn(char *s, char *s_con); Cho độ dài đoạn đầu của s, mà mọi ký tự của đoạn đều có mặt trong chuỗi s_con 18

  19. Các hàm thư viện xử lý chuỗi strdup:gấp đôi một chuỗi char *strdup(char *s); Cấp vùng nhớ để đặt 2 lần chuỗi s. Nếu thành công hàm cho địa chỉ vùng này, nếu không hàm cho NULL strlen: độ dài của chuỗi int strlen(char *s); strlwr: chuyển chữ hoa thành chữ thường char *strlwr(char *s); 19

  20. Ví dụ:strlen: Chiều dài xâu #include <string.h> #include <ctype.h> #include <iostream.h> #include <conio.h> int main(void) { char *string = "Khoa Cong Nghe Thong Tin"; cout << string; cout << '\n'; cout << "Co chieu dai la "; cout <<strlen(string); getch(); return 0; } Chương 3: Các thành phàn cơ bản 20

  21. Các hàm thư viện xử lý chuỗi strncat: ghép thêm n ký tự vào chuỗi char *strncat(char *s_nhan, char *s,int n); Ghép n ký tự đầu của s vào s_nhan strncmp: so sánh n ký tự đầu của 2 chuỗi int strncmp(char *s1, char *s2, int n); strncpy: sao n ký tự đầu cho một chuỗi char *strncpy(char *s_nhan, char *s_gui,int n); Sao n ký tự đầu của s_gui sang s_nhan strnset: gán n lần 1 ký tự cho 1 chuỗi char *strnset(char *s, int c,int n); 21

  22. Một số ví dụDùng hàm strcat để ghép chuỗi. #include <string.h> #include <conio.h> #include <iostream.h> int main(void) { char xaukt[25]; char *blank = " ", *c = "C++", *Borland = "Borland"; strcat(xaukt, Borland); strcat(xaukt, blank); strcat(xaukt, c); cout << xaukt; getch(); return 0; } Có 3 chuỗi: S1=“Borland” S2=“ “ S3=“C++” Dùng hàm strcat để có chuỗi: “Borland C++” 22

  23. Các hàm thư viện xử lý chuỗi strpbrk: tìm sự xuất hiện đầu tiên char *strpbrk(char *s1, char *s2); Tìm sự xuất hiện của s2 trong s1, nếu có trả về địa chỉ của ký tự tìm thấy trong s1, nếu không NULL strrev: đảo ngược 1 chuỗi char *strrev(char *s); Đảo ngược chuỗi s.hàm cho địa chỉ chuỗi đã đảo ngược. 23

  24. Các hàm thư viện xử lý chuỗi strset: đặt 1 ký tự vào mọi vị trí của chuỗi char *strset(char *s,int kt); Thay mọi ký tự trong s bằng kt strstr: tìm sự xuất hiện đầu tiên char *strstr(char *s, char *s_con); Tìm sự xuất hiện đầu tiên của s_con trong s. nếu có cho địa chỉ chuỗi con, nếu không NULL strupr: chuyển chữ thường thành chữ hoa char *strupr(char *s); Chuyển mọi chữ thường trong s thành chữ hoa 24

  25. Một số ví dụDùng hàm chuyển chữ thường thành chữ hoa. #include <string.h> #include <iostream.h> #include <conio.h> int main(void) { char *string = "truong dai hoc cong nghiep tp hcm", *s; cout << "Xau ban dau la: "; cout << string; cout << '\n'; cout << "Xau moi la: "; s = strupr(string); cout << s; getch(); return 0; } 25

  26. Một số hàm kiểm tra ký tự#include <ctype.h> isalnum: kiểm tra ký tự có phải là ký tự alphanumeric (chữ cái hoặc chữ số) không? int isalnum(int kt); isalpha: kiểm tra ký tự có phải là chữ cái không? int isalpha(int kt); iscntrl: kiểm tra ký tự có phải là ký tự điều khiển không? int iscntrl(int kt); isdigit: kiểm tra ký tự có phải chữ số không? int isdigit(int kt); 26

  27. Một số hàm kiểm tra ký tự islower: kiểm tra ký tự có phải là chữ cái thường không? int islower(int kt); isupper: kiểm tra ký tự có phải là chữ cái hoa không? int isupper(int kt); isspace: kiểm tra ký tự có phải là ký tự trống không? int isspace(int kt); ispunct: kiểm tra ký tự có phải là ký tự dấu chấm câu không? int ispunct(int kt); 27

  28. Ví dụ:isalnum: kiểm tra ký tự #include <ctype.h> #include <conio.h> #include <iostream.h> int main(void) { char c = 'C'; if (isalnum(c)) cout << "C is alphanumeric"; else cout << "c is not alphanumeric"; getch(); return 0; } 28

  29. Ví dụ:isupper: kiểm tra ký tự có phải là chữ …? #include <ctype.h> #include <iostream.h> #include <conio.h> int main(void) { char c = 'C'; if (isupper(c)) cout<<c<<“ la chu in hoa\n"; else cout<<c<<“ la chu in thuong\n"; getch(); return 0; } 29

  30. #include <ctype.h> #include <iostream.h> #include <conio.h> int main(void) { char c = 'C'; if (ispunct(c)) cout<<c<<“ la so\n"; else cout<<c<<“ khong la so\n"; getch(); return 0; } 30

More Related