Tin Học Cơ Sở Xâu Ký Tự - String Xâu Ký Tự - String • • • • Một số quy tắc Nhập / xuất Con trỏ chuỗi ký tự Một số hàm thư viện Lê Nguyên Khôi Một số quy tắc • Chuỗi ký tự mảng chiều có thành phần số nguyên đượ c kết thúc bở i số • Ký tự kết thúc (0) cuối chuỗi ký tự thườ ng đượ c gọi ký tự null (không giống trỏ NULL) Có thể ghi ‘\0’ (không phải chữ o) • Đượ c khai báo truyền tham số mảng chiều char char unsigned unsigned char char Lê Nguyên Khôi s[100]; s[100]; s1[1000]; s1[1000]; Ví dụ char char ten[4] ten[4] == {{ 'H', 'H', 'u', 'u', 'n', 'n', 'g', 'g', '\0' '\0' }; }; char char ho[6] ho[6] == "Phung"; "Phung"; char char ten_khac[] ten_khac[] == "Hoang "Hoang Quoc"; Quoc"; char char ky_tu[7] ky_tu[7] == "No "No null"; null"; ten 'H' 'u' 'n' 'g' ho 'P' 'h' 'u' 'n' 'g' ten_khac 'H' 'o' 'a' 'n' 'g' 32 'Q' 'u' 'o' ky_tu 'N' 'o' 32 'n' 'u' 'l' 'l' 'c' Nhập / Xuất • Có thể nhập / xuất chuỗi ký tự s cách nhập từ ng ký tự s • Hoặc sử dụng hàm scanf printf vớ i ký tự định dạng %s char ten[] char ten[] == "Hoang "Hoang Quoc"; Quoc"; printf("%s\n", printf("%s\n", ten); ten); scanf("%s", scanf("%s", ten); ten); • Nhập chuỗi có khoảng trắng dùng hàm gets char ten[100]; char ten[100]; printf("Nhap printf("Nhap mot mot chuoi chuoi ky ky tu: tu: "); "); gets(ten); gets(ten); Lê Nguyên Khôi Lưu ý: Kết thúc chuỗi #include #include int int main() main() "Quoc" không {{ char char ten_khac[] ten_khac[] == "Hoang "Hoang Quoc"; Quoc"; in printf("%s\n", printf("%s\n", ten_khac); ten_khac); ten_khac[5] ten_khac[5] == '\0'; '\0'; printf("%s\n", printf("%s\n", ten_khac); ten_khac); }} Hoang Hoang Quoc Quoc Hoang Hoang return return 0; 0; ten_khac 'H' 'o' 'a' 'n' 'g' 32 'Q' 'u' 'o' 'c' Một số hàm thư viện • Lấy độ dài chuỗi l = strlen(s); • Đổi toàn ký tự chuỗi thành IN HOA strupr(s); • Đổi toàn ký tự chuỗi thành in thườ ng strlwr(s); Lê Nguyên Khôi Một số hàm thư viện • So sánh chuỗi: theo thứ tự bảng mã ASCII – Phân biệt IN HOA – in thườ ng: int strcmp(const char *s1, const char *s2); – Không phân biệt IN HOA – in thườ ng: int stricmp(const char *s1, const char *s2); – Giá trị trả về: • =0 s1 s2 • >0 s1 “lớ n hơ n” s2 • [...]... StrIns(s ++ 8, 8, "45 "); "45 "); return return 0; 0; Lê Nguyên Khôi printf("%s\n", printf("%s\n", s); s); printf("%s\n", printf("%s\n", p); p); 16 Xóa một đoạn ký tự #include #include void void StrDel(char StrDel(char *s, *s, int int n) n) {{ memmove(s, memmove(s, ss ++ n, n, strlen(s+n)+1); strlen(s+n)+1); }} int xoa int main() main() xoa12 345 12 345 {{ xoa xoa45 45 char char s[]=... s[]= "Thu "Thu strtok: strtok: 9,123 .45 "; 9,123 .45 "; char char *p; *p; }} pp == strtok(s, strtok(s, SEPARATOR); SEPARATOR); while while (p (p != != NULL) NULL) {{ printf("%s\n", printf("%s\n", p); p); pp == strtok(NULL, strtok(NULL, SEPARATOR); SEPARATOR); }} Lê Nguyên Khôi return 0; return 0; Thu Thu strtok: strtok: 99 123 123 45 45 13 Một số hàm thư viện • Tìm một ký tự trên chuỗi: char *strchr(const... memmove(s, memmove(s, ss ++ n, n, strlen(s+n)+1); strlen(s+n)+1); }} int xoa int main() main() xoa12 345 12 345 {{ xoa xoa45 45 char char s[]= s[]= "Thu "Thu xoa xoa 12 345 "; 12 345 "; }} StrDel(s, StrDel(s, 4) ; 4) ; StrDel(s StrDel(s ++ 4, 4, 3); 3); return return 0; 0; Lê Nguyên Khôi printf("%s\n", printf("%s\n", printf("%s\n", printf("%s\n", s); s); p); p); 17 ... Lê Nguyên Khôi 15 Chèn một đoạn ký tự #include #include void void StrIns(char StrIns(char *s, *s, char char *sub) *sub) {{ int int len len == strlen(sub); strlen(sub); memmove(s memmove(s ++ len, len, s, s, strlen(s)+1); strlen(s)+1); strncpy(s, strncpy(s, sub, sub, len); len); }} 123 123Thu Thuchen chen int main() int main() 123 123Thu Thuc45hen c45hen {{ char char s[]= s[]= "Thu... return 0; return 0; Thu Thu strtok: strtok: 99 123 123 45 45 13 Một số hàm thư viện • Tìm một ký tự trên chuỗi: char *strchr(const char *s, int c); • Tìm một đoạn ký tự trên chuỗi: char *strstr(const char *s1, const char *s2); Lê Nguyên Khôi 14 Ví dụ tìm kiếm #include #include int int main() main() {{ char char s[]= s[]= "Thu "Thu tim tim kiem kiem xau"; xau"; char char *p; *p; }}... {{ char char s[] s[] == "Hoang "Hoang Quoc"; Quoc"; char char s2[100], s2[100], *s3; *s3; }} strcpy(s2, strcpy(s2, s); s); printf("%s\n", printf("%s\n", s2); s2); strncpy(s2 strncpy(s2 ++ 2, 2, "12 345 ", "12 345 ", 3); 3); printf("%s\n", printf("%s\n", s2); s2); s3 s3 == strdup(s strdup(s ++ 6); 6); printf("%s\n", printf("%s\n", s3); s3); free(s3); free(s3); return 0; 0; Lêreturn Nguyên Khôi Hoang Hoang ... xoa int main() main() xoa12 345 12 345 {{ xoa xoa45 45 char char s[]= s[]= "Thu "Thu xoa xoa 12 345 "; 12 345 "; }} StrDel(s, StrDel(s, 4) ; 4) ; StrDel(s StrDel(s ++ 4, 4, 3); 3); return return 0; 0;... 99 123 123 45 45 13 Một số hàm thư viện • Tìm ký tự chuỗi: char *strchr(const char *s, int c); • Tìm đoạn ký tự chuỗi: char *strstr(const char *s1, const char *s2); Lê Nguyên Khôi 14 Ví dụ tìm.. .Xâu Ký Tự - String • • • • Một số quy tắc Nhập / xuất Con trỏ chuỗi ký tự Một số hàm thư viện Lê Nguyên Khôi Một số quy tắc • Chuỗi ký tự mảng chiều có thành phần