Bài giảng Cấu trúc dữ liệu và Giải thuật - Chương 12 - Khương Đại Thế

ppt 17 trang hoanguyen 2810
Bạn đang xem tài liệu "Bài giảng Cấu trúc dữ liệu và Giải thuật - Chương 12 - Khương Đại Thế", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_lap_trinh_can_ban_chuong_12_khuong_dai_the.ppt

Nội dung text: Bài giảng Cấu trúc dữ liệu và Giải thuật - Chương 12 - Khương Đại Thế

  1. Chương 12: CHUỖI (STRING) Gv.Khương Đại Thể 1
  2. CHUỖI KÝ TỰ (String) Khái niệm ❖ Chuỡi ký tự là mợt dãy các phần tử, mỡi phần tử có kiểu ký tự (char). ❖ Chuỡi ký tự được kết thúc bằng ký tự ‘\0’(NULL). Do đó khi khai báo chuỡi phải khai báo dư 1 phần tử để chứa ký tự ‘\0’. Gv.Khương Đại Thể 2
  3. CHUỖI KÝ TỰ (String) Ví dụ: char s[8] = ”TIN HOC” ; // khai báo chuỡi S có 8 phần tử kiểu char và gán dãy ký tự “TIN HOC” vào chuỡi S. Index 0 1 2 3 4 5 6 7 s ‘T’ ‘I’ ‘N’ ‘ ‘ ‘H’ ‘O’ ‘C’ ‘\0’ Gv.Khương Đại Thể 3
  4. CHUỖI KÝ TỰ (String) Khai báo có 2 cách khai báo sau : Cách 1: giống như mảng 1chiều char [ Số ký tự tối đa của chuỡi ] ; Ví dụ: char str[25]; Chuỡi str làm ảng 1 chiều kiểu ký tự, có 25 phần tử (như vậy tối đa ta có thể nhập 24 ký tự vì phần tử thứ 25 đã chứa ký tự kết thúc chuỡi ‘\0’ ). Chú ý: char str[25]; str = “Hello”; // Error strcpy(str, “Hello”); // hợp hợp lệ Cách 2: Con trỏ char * ; Ví dụ 1: char *str = ”Hello”; // C tự động cấp vùng nhớ vừa đủ Ví dụ 2: char *str; // Con trỏ str sau này sẽ chứa chuỡi nào đó. Gv.Khương Đại Thể 4
  5. CHUỖI KÝ TỰ (String) Các thao tác trên chuỡi: Nhập chuỡi: char *gets(char *s); Ví dụ: #include #include #include Phải có void main() { char str[80]; clrscr(); printf("Nhap vao chuoi:"); gets(str); printf("Chuoi vua nhap la: %s\n", str); getch(); } Gv.Khương Đại Thể 5
  6. CHUỖI KÝ TỰ (String) Các thao tác trên chuỡi: Xuất chuỡi: int puts(const char *s); Ví dụ: #include #include #include Phải có void main() { char str[80]; clrscr(); printf("Nhap vao chuoi:"); gets(str); printf("Chuoi vua nhap la: "); puts(str); getch(); } Gv.Khương Đại Thể 6
  7. CHUỖI KÝ TỰ (String) Các hàm thư viện : int strlen(const char *s); CHỨC NĂNG: Trả về đợ dài của chuỡi s. VÍ DỤ : char *s = “Ngon ngu C"; printf("Do dai s: %d\n", strlen(s)); KẾT QUẢ: Do dai s: 10 Gv.Khương Đại Thể 7
  8. CHUỖI KÝ TỰ (String) Các hàm thư viện : char *strcpy(char *dich, const char *nguon); CHỨC NĂNG: Sao chép nợi dung chuỡi nguon vào chuỡi dich. VÍ DỤ : char dich[10]; char *nguon = "abcdefghi"; strcpy(dich, nguon); dich = nguon; printf("%s\n", dich); KẾT QUẢ: abcdefghi Gv.Khương Đại Thể 8
  9. CHUỖI KÝ TỰ (String) Các hàm thư viện : char *strncpy(char *dich, const char *nguon, int n); CHỨC NĂNG: Chép n ký tự từ chuỡi nguon sang chuỡi dich. Nếu chiều dài nguon < n thì hàm sẽ điền khoảng trắng cho đủ n ký tự vào dich. VÍ DỤ : char dich[4]; char *nguon = "abcdefghi"; strncpy(dich, nguon, 3); dich = nguon(3); printf("%s\n", dich); KẾT QUẢ: abc Gv.Khương Đại Thể 9
  10. CHUỖI KÝ TỰ (String) Các hàm thư viện : char *strcat(char *s1,const char *s2); CHỨC NĂNG: Nới chuỡi s2 vào sau chuỡi s1. VÍ DỤ : char *s1 = “Tin-”; char *s2 = “Hoc"; strcat(s1, s2); s1 = s1+s2; printf("%s\n", s1); KẾT QUẢ: Tin-Hoc Gv.Khương Đại Thể 10
  11. CHUỖI KÝ TỰ (String) Các hàm thư viện : int strcmp(const char *s1, const char *s2); CHỨC NĂNG: So sánh 2 chuỡi s1 và s2 theo nguyên tắc thứ tự từ điển. Phân biệt chữ hoa và thường. Trả về: =0: nếu s1 bằng s2. >0: nếu s1 lớn hơn s2. if(s1 == s2) <0: nếu s1 nhỏ hơn s2. VÍ DỤ : char *s1 = “abcd”; char *s2 = "abCD"; if(strcmp(s1, s2)==0) printf("Giong nhau"); else printf(“Khac nhau”); KẾT QUẢ: Khac nhau Gv.Khương Đại Thể 11
  12. CHUỖI KÝ TỰ (String) Các hàm thư viện : int stricmp(const char *s1, const char *s2); CHỨC NĂNG: So sánh 2 chuỡi s1 và s2 theo nguyên tắc thứ tự từ điển. Khơng phân biệt chữ hoa và thường. Trả về: =0: nếu s1 bằng s2. >0: nếu s1 lớn hơn s2. if(s1 == s2) <0: nếu s1 nhỏ hơn s2. VÍ DỤ : char *s1 = “abcd”; char *s2 = "abCD"; if(stricmp(s1, s2)==0) printf("Giong nhau"); else printf(“Khac nhau”); KẾT QUẢ: Giong nhau Gv.Khương Đại Thể 12
  13. CHUỖI KÝ TỰ (String) Các hàm thư viện : char *strstr(const char *s1, const char *s2); CHỨC NĂNG: Tìm sự xuất hiện đầu tiên của chuỡi s2 trong chuỡi s1. Trả về: • NULL: nếu khơng có. • Ngược lại: Địa chỉ bắt đầu chuỡi s2 trong s1. VÍ DỤ : char *s1 = “Ngon ngu C"; char *s2 = "ngu", *ptr; ptr = strstr(s1, s2); printf("Chuoi con: %s\n", ptr); KẾT QUẢ: Chuoi con: ngu C Gv.Khương Đại Thể 13
  14. CHUỖI KÝ TỰ (String) Các hàm thư viện : char *strrev(char *str); CHỨC NĂNG: Đảo ngược chuỗi str, trừ ‘\0’ VÍ DỤ : char input[16] = "abcd"; char *p; p = strrev(input); printf(“Chuoi dao nguoc : %s\n", p); Output: Chuoi dao nguoc : dcba Gv.Khương Đại Thể 14
  15. CHUỖI KÝ TỰ (String) Các hàm thư viện : char *strtok(char *s1, const char *s2); CHỨC NĂNG: Tách chuỡi s1 bởi chuỡi s2 VÍ DỤ : char input[16] = "abc,d"; char *p; p = strtok(input, ","); // Lấy chuỡi đầu if (p) printf("S1: %s\n", p); p = strtok(NULL, ","); //Lấy chuỡi cịn lại, tham số đầu là NULL if (p) printf("S2: %s\n", p); KẾT QUẢ: S1: abc S2: d Gv.Khương Đại Thể 15
  16. CHUỖI KÝ TỰ (String) Chú ý: ➢ Cũng giớng như kiểu mảng mợt chiều, thao tác truy xuất các phần tử trên chuỡi hoàn toàn tương tự. Bên cạnh đó, kiểu dữ liệu này cịn được cài đặt sẵn mợt sớ hàm thư viện rất hữu ích nên trong quá trình thao tác trên chuỡi nên khi cài đặt ta cớ gắng tận dụng tối đa những hàm liên quan. ➢ Khơng nên sử dụng hàm scanf() để nhập chuỡi trong trường hợp chuỡi dữ liệu nhập vào có chứa khoảng trắng. ➢ Nếu nhập chuỡi phía sau hàm scanf() nên chèn hàm fflush(stdin) hoặc hàm flushall() giữa scanf và gets() để xóa vùng đệm, tránh trường hợp chương trình bỏ qua hàm gets() do trong vùng đệm cịn lưu ký tự xuớng dịng của phím ENTER. ➢ Khi thao tác trên chuỡi lưu ý phải đảm bảo chuỡi được kết thúc bằng ký tự kết thúc ‘\0’. Gv.Khương Đại Thể 16
  17. XIN CÁM ƠN Gv.Khương Đại Thể 17