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 Chương 4. Xử lý chuỗi ký tự #2 Nội dung Khái niệm Khai báo Các hàm xử lý chuỗi Bài tập #3 Khái niệm 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ự Hằng ký tự được đặt trong cặp nháy đơn. Ví dụ: ‘a’, ‘1’, ‘ ’ Hằng chuỗi được đặt trong cặp nháy kép. Ví dụ: “ho va ten”, “123”, “” 3 #4 Khái niệm Chuỗi ký tự được kết thúc bằng ký tự ‘\0’ (giá trị 0). Do đó khi khai báo độ dài của chuỗi luôn luôn khai báo dư 1 phần tử để chứa ký tự ‘\0’. Ví dụ: Chuỗi “NGUYEN VAN A” được lưu Chuỗi gồm 13 ký tự 4 ‘N’ ‘G’ ‘U’ ‘Y’ ‘E’ ‘N’ ‘ ‘ ‘V’ ‘A’ ‘N’ ‘ ‘ ‘A’ ‘\0’ 0 1 2 3 4 5 6 7 8 9 10 11 12 #5 Khai báo chuỗi Cách 1: Con trỏ hằng char < Tên chuỗi > [< Số ký tự tối đa>] ; Ví dụ: char str[25]; Ý nghĩa khai báo 1 mảng kiểu ký tự tên là str có 25 phần tử (như vậy 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’ ) #6 Khái niệm Cách 2: Con trỏ char *< Tên chuỗi >; Ví dụ:char *str; Phải cấp phát bộ nhớ trước khi 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ự #7 Nhập chuỗi Cú pháp: char *gets(char *str); Nhận các ký tự nhập từ phím cho đến khi nhấn phím Enter và đư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); } #8 Nhập chuỗi Lưu ý: Không thể dùng hàm scanf để nhập chuỗi có khoảng trắng Ví dụ: void main() { char str[80]; printf("Nhap vao chuoi: "); scanf(“%s”, &str); printf("Chuoi vua nhap la: %s\n", str); } Giả sử nhập vào chuỗi: “Nguyen Van An” Thì kết quả xuất ra màn hình là: “Nguyen” (do str chỉ lưu chuỗi “Nguyen”) #9 Xuất chuỗi 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” #10 Các hàm xử lý chuỗi - <string.h> 1. Tính độ dài chuỗi: strlen 2. Sao chép chuỗi: strcpy, strncpy 3. Nối chuỗi: strcat, strncat 4. So sánh chuỗi: strcmp, strncmp, stricmp, strnicmp 5. Tìm kiếm: strchr, strstr 6. Tách chuỗi: strtok 7. Đổi thành chữ in HOA: strupr 8. Đổi thành chữ in thường: strlwr [...]... printf("%s\n", dest); Kết quả: abc 15 Bài tập ví dụ - sao chép chuỗi #16 Viết hàm đổi tất cả ca c ký tự có trong chuỗi thành chữ HOA (không dùng hàm strupr) Viết chương trình đảo ngươ c ca c ký tự trong chuỗi Ví dụ: Nhập: ABCDE Chuỗi sau khi đảo ngư c là: EDCBA Bài tập làm thêm – sao chép chuỗi #17 Viết hàm đổi tất c ca c ký tự có trong chuỗi thành chữ thường (không dùng hàm... 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 nhau Tìm ký tự trong chuỗi #26 Tìm sự xuất hiện đầu tiên của ký tư c trong 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ự trong chuỗi #27 Ví dụ: char s[15]; char... tiên của mỗi từ thành chữ in HOA Nối chuỗi #18 Nối chuỗi s2 vào chuỗi s1 strcat(char s1[],char s2[]); Ví dụ: char *s1 = “Khoa”; char *s2 = "CNTT"; strcat(s1, “ “); strcat(s1, s2); printf("%s", s1); Kết quả: Khoa CNTT Nối chuỗi #19 Nối n ký tự đầu tiên của chuỗi s2 vào chuỗi s1 strncat(char s1[], char s2[], int n); Ví dụ: char *s1 = “Khoa”; char *s2 = "CNTT"; strcat(s1, “ “); strncat(s1,... dest[10]; char *src = "abcdefghi"; strcpy(dest, src); printf("%s", dest); Kết quả: abcdefghi 14 Sao chép chuỗi #15 Chép n ký tự từ chuỗi scr sang chuỗi dest Nếu chiều dài scr < n thì hàm sẽ điền khoảng trắng cho đủ n ký tự vào đích strncpy(char dest[], char scr[], int n); dest[n]=‘\0’; //ho c dest[n]=0; Ví dụ: char dest [4] ; char *src = "abcdefghi"; strncpy(dest, src, 3); dest[3]=0;... xem chuỗi có đối xứng hay không? Bài tập làm thêm – tính độ dài chuỗi #13 Viết hàm tra xem trong chuỗi có ký tự số hay không nếu có tách ra thành một mảng số riêng Viết chương trình tìm kiếm xem ký tự nào xuất hiện nhiều nhất trong 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 =...Tính độ dài c a chuỗi #11 int strlen(char s[]); Ví dụ: char *str = "Borland International"; printf("Do dai str = %d\n", strlen(str)); Kết quả: Do dai str = 21 Bài tập ví dụ - tính độ dài chuỗi #12 Viết hàm đếm số ký tự trắng trong chuỗi Viết hàm in ra màn hình chuỗi theo thứ tự đảo ngư c Viết hàm tìm xem ký tự ch c trong chuỗi không? Nếu c cho biết vị trí xuất hiện đầu tiên c a ch Viết hàm... 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 1 ký tự xem có trong chuỗi hay không, nếu có... 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 hiện trong s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu là những ký tự cho đến khi gặp chuỗi s2 đầu tiên, chuỗi sau là những ký tự còn lại của... nếu có xuất ra vị trí của từ đó Viết chương trình tìm kiếm 1 chuỗi xem có trong chuỗi hay không, nếu có xuất ra vị trí của xuất hiện c a chuỗi đó Đếm số từ c trong chuỗi (từ c ch nhau bởi khoảng trắng) Viết hàm kiểm tra xem chuỗi c tuần hoàn hay không? Viết hàm đảo vị trí của từ đầu và từ cuối Ví dụ: nhập “bo an co” xuat ra “co an bo” 34 Q&A #35 ... sánh chuỗi # 24 So sánh chuỗi s1 và s2 nhưng không phân biệt hoa thường, giá trị trả về 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 nhau So sánh chuỗi #25 So sánh n ký tự đầu tiên c a s1 và s2, không phân biệt hoa thường, giá trị trả về tương tự hàm strcmp() . Tính độ dài chuỗi: strlen 2. Sao chép chuỗi: strcpy, strncpy 3. Nối chuỗi: strcat, strncat 4. So sánh chuỗi: strcmp, strncmp, stricmp, strnicmp 5. Tìm kiếm: strchr, strstr 6. Tách chuỗi: strtok 7 minhthai@itc.edu.vn Website: www.minhthai.edu.vn C p nhật: 08 tháng 04 năm 2015 Chương 4. Xử lý chuỗi ký tự #2 Nội dung Khái niệm Khai báo C c hàm xử lý chuỗi Bài tập #3 Khái niệm Chuỗi ký. 21 #12 Bài tập ví dụ - tính độ dài chuỗi Viết hàm đếm số ký tự trắng trong chuỗi Viết hàm in ra màn hình chuỗi theo thứ tự đảo ngư c Viết hàm tìm xem ký tự ch c trong chuỗi không? Nếu c cho biết