1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình C nâng cao‎: Chương 4 - Trần Minh Thái

35 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • Slide 1

  • Nội dung

  • Khái niệm

  • Khái niệm

  • Khai báo chuỗi

  • Khái niệm

  • Nhập chuỗi

  • Nhập chuỗi

  • Xuất chuỗi

  • Các hàm xử lý chuỗi - <string.h>

  • Tính độ dài của chuỗi

  • Bài tập ví dụ - tính độ dài chuỗi

  • Bài tập làm thêm – tính độ dài chuỗi

  • Sao chép chuỗi

  • Sao chép chuỗi

  • Bài tập ví dụ - sao chép chuỗi

  • Bài tập làm thêm – sao chép chuỗi

  • Nối chuỗi

  • Nối chuỗi

  • So sánh chuỗi

  • So sánh chuỗi

  • So sánh chuỗi

  • So sánh chuỗi

  • So sánh chuỗi

  • So sánh chuỗi

  • Tìm ký tự trong chuỗi

  • Tìm ký tự trong chuỗi

  • Tìm chuỗi con

  • Tìm chuỗi con

  • Tách chuỗi

  • Tách chuỗi

  • Đổi sang chữ in HOA

  • Đổi sang chữ in thường

  • BÀI TẬP

  • Q&A

Nội dung

Chuỗi ký tự là trường hợp đặc biệt của mảng 1 chiều, là một dãy các phần tử, mỗi phần tử có kiểu ký tự. Trong chương này, người học sẽ tìm hiểu về xử lý chuỗi ký tự trong lập trình C thông qua những nội dung sau đây: Khái niệm về chuỗi ký tự, khai báo chuỗi ký tự, các hàm xử lý chuỗi,... Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.

Chương Xử lý chuỗi ký tự TRẦN MINH THÁI Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn Cập nhật: 08 tháng 04 năm 2015 Nội dung #2 Khái niệm Khai báo Các hàm xử lý chuỗi Bài tập Khái niệm #3 Chuỗi ký tự trường hợp đặc biệt mảng chiều, một dãy phần tử, phần tử có kiểu ký tự Hằng ký tự đặt cặp nháy đơn Ví dụ: ‘a’, ‘1’, ‘ ’ Hằng chuỗi đặt cặp nháy kép Ví dụ: “ho va ten”, “123”, “” Khái niệm #4 Chuỗi ký tự kết thúc ký tự ‘\0’ (giá trị 0) Do đó khai báo độ dài chuỗi luôn khai báo dư phần tử để chứa ký tự ‘\0’ Ví dụ: Chuỗi “NGUYEN VAN A” lưu ‘N’ ‘G’ ‘U’ ‘Y’ ‘E’ ‘N’ ‘ ‘ ‘V’ ‘A’  Chuỗi gồm 13 ký tự ‘N’ ‘ ‘ 10 ‘A’ ‘\0’ 11 12 Khai báo chuỗi #5 Cách 1: Con trỏ hằng char < Tên chuỗi > [< Số ký tự tối đa>] ; Ví du: char str[25]; Ý nghĩa khai báo mảng kiểu ký tự tên là str có 25 phần tử (như có thể lưu tối đa 24 ký tự vì phần tử thứ 25 đã chứa ký tự kết thúc chuỗi ‘\0’ ) Khái niệm #6 Cách 2: Con trỏ char *< Tên ch̃i >; Ví dụ:char *str; Phải cấp phát bợ nhớ trước sử dụng chuỗi str Ví dụ: char *str; str = (char*)malloc(30); //Cấp phát bộ nhớ cho str gồm 30 ký tự Nhập chuỗi #7 Cú pháp: char *gets(char *str); Nhận ký tự nhập từ phím cho đến nhấn phím Enter đưa vào chuỗi str Ví dụ: void main() { char str[80]; printf("Nhap vao chuoi: "); gets(str); printf("Chuoi vua nhap la: %s\n", str); } Nhập chuỗi #8 Lưu ý: Không thể dùng hàm scanf để nhập chuỗi có khoảng trắng Giả sử nhập vào chuỗi: “Nguyen Van An” Ví dụ: Thì kết xuất hình là: “Nguyen” void main() (do str lưu chuỗi “Nguyen”) { char str[80]; printf("Nhap vao chuoi: "); scanf(“%s”, &str); printf("Chuoi vua nhap la: %s\n", str); } Xuất chuỗi #9 Cú pháp : int puts (const char *s); Ví dụ: void main() { char *str = "Vi du xuat chuoi"; puts(str); }  Có thể dùng printf() với định dạng “%s” Các hàm xử lý chuỗi - #10 Tính đợ dài chuỗi: strlen Sao chép chuỗi: strcpy, strncpy Nối chuỗi: strcat, strncat So sánh chuỗi: strcmp, strncmp, stricmp, strnicmp Tìm kiếm: strchr, strstr Tách chuỗi: strtok Đổi thành chữ in HOA: strupr Đổi thành chữ in thường: strlwr So sánh chuỗi #21 !!! Ký tự HOA < Ký tự thường VD: ‘A’ < ‘a’ (do mã Ascii ‘A’ = 65, mã Ascii ‘a’ = 97) Ví dụ: int kq = strcmp("abc", "ABC") Giá trị kq > So sánh chuỗi #22 Ví dụ: char *s1 = “abcd”; char *s2 = "abCD"; if(strcmp(s1, s2)==0) printf("Giong nhau"); else printf(“Khac nhau”);  Kết quả: Khac So sánh chuỗi #23 So sánh n ký tự đầu tiên s1 s2, giá trị trả tương tự hàm strcmp() int strncmp(char s1[],char s2[], int n); Ví dụ: char *s1 = “abcd”; char *s2 = "abef"; if(strncmp(s1, s2, 2)==0) printf("Giong nhau"); else printf(“Khac nhau”);  Kết quả: Giong So sánh chuỗi #24 So sánh chuỗi s1 s2 không phân biệt hoa thường, giá trị trả tương tự hàm strcmp() int stricmp(char s1[],char 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 So sánh chuỗi #25 So sánh n ký tự đầu tiên s1 s2, không phân biệt hoa thường, giá trị trả tương tự hàm strcmp() int strnicmp(char s1[],char s2[], int n); Ví dụ: char *s1 = “aBcd”; char *s2 = "Abef"; if(strnicmp(s1, s2, 2)==0) printf("Giong nhau"); else printf(“Khac nhau”);  Kết quả: Giong Tìm ký tự chuỗi #26 Tìm sự xuất đầu tiên ký tư c chuỗi s char *strchr(char s[], char c); Trả về: NULL: nếu không có Địa chỉ c: nếu tìm thấy Tìm ký tự chuỗi #27 Ví dụ: char s[15]; char *ptr, c = 'm'; strcpy(s, "Vi du tim ky tu"); ptr = strchr(s, c); if (ptr) printf("Ky tu %c xuat hien tai: %d", c, ptr-s); else printf("Khong tim thay");  Kết quả: Ky tu m xuat hien tai: Tìm chuỗi #28 Tìm sự xuất đầu tiên chuỗi s2 chuỗi s1 char *strstr(char s1[], char s2[]); Trả về: NULL: nếu không có Ngược lại: Địa chỉ bắt đầu chuỗi s2 s1 Tìm chuỗi #29 Ví dụ: char *s1 = "Borland International"; char *s2 = "nation", *ptr; ptr = strstr(s1, s2); printf("Chuoi con: %s\n", ptr);  Kết quả: Chuoi con: national Tách chuỗi #30 Tách chuỗi: char *strtok(char s1[], char s2[]);  Nếu s2 có xuất s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu ký tự cho đến gặp chuỗi s2 đầu tiên, chuỗi sau ký tự còn lại s1 sau đã bỏ chuỗi s2 xuất s1  Nếu s2 không xuất s1 thì kết chuỗi tách vẫn s1 Tách chuỗi #31 Ví dụ: char input[16] = "abc,d";  Kết quả: char *p; S11 = abc S12 = d // Lay chuoi dau p = strtok(input, ","); if (p) printf("S11 = %s\n", p); /*Lay chuoi lai, tham so dau la NULL*/ p = strtok(NULL, ","); if (p) printf("S12 = %s", p); Đổi sang chữ in HOA #32 Đổi chuỗi str thành chuỗi in HOA char* strupr(char str[]); Ví dụ: char *s1 = “aBcd”; char *s2 = strupr(s1); printf(“s2 = %s“, s2);  Kết quả: ABCD Đổi sang chữ in thường #33 Đổi chuỗi str thành chuỗi in thường char* strlwr(char str[]); Ví dụ: char *s1 = “aBcd”; char *s2 = strlwr(s1); printf(“s2 = %s“, s2);  Kết quả: abcd BÀI TẬP #34 Viết chương trình tìm kiếm ký tự xem có chuỗi hay không, nếu có xuất vị trí từ đó Viết chương trình tìm kiếm chuỗi xem có chuỗi hay không, nếu có xuất vị trí xuất chuỗi đó Đếm số từ có chuỗi (từ cách khoảng trắng) Viết hàm kiểm tra xem chuỗi có t̀n hồn hay khơng? Viết hàm đảo vị trí từ đầu từ cuối Ví dụ: nhập “bo an co” xuat “co an bo” 34 Q&A #35 ... Viết chương trình tìm kiếm xem ký tự xuất nhiều chuỗi Sao chép chuỗi # 14 Sao chép nội dung chuỗi scr vào chuỗi dest strcpy(char dest[], char scr[]); Ví dụ: char dest[10]; char *src = "abcdefghi";... độ dài chuỗi: strlen Sao chép chuỗi: strcpy, strncpy Nối chuỗi: strcat, strncat So sánh chuỗi: strcmp, strncmp, stricmp, strnicmp Tìm kiếm: strchr, strstr Tách chuỗi: strtok Đổi thành chữ in... s2); printf("Chuoi con: %s ", ptr);  Kết quả: Chuoi con: national Tách chuỗi #30 Tách chuỗi: char *strtok(char s1[], char s2[]);  Nếu s2 có xuất s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu

Ngày đăng: 08/05/2021, 12:20