Lớp string trong stl

Tài liệu Lớp string trong stl: Lớp String trong STL I/Khái Niệm: Chuỗi là một hàng gồm các kí tự liên tục nhau, các kí tự ở đây rất đa dạng có thể là chữ số, chữ cái, dấu cách, kí hiệu số lượng kí tự rất lớn(216 kí tự) và kết thúc bằng kí tự ‘\0’. II/Chuỗi trong C++: Các Hàm Thao TácThông Thường Trong C: int strlen(const char* s) Xác định độ dài một chuỗi char toupper(char c) Chuyển đổi một ký tự thường thành ký tự hoa char* strupr(char *s) Chuyển đổi chuỗi chữ thường thành chuỗi chữ hoa char *strlwr(char *s) Chuyển đổi chuỗi chữ hoa thành chuỗi toàn chữ thường char *strncpy(char *Des, const char *Source, size_t n) Chép n ký tự đầu tiên của chuỗi nguồn sang chuỗi đích char* strstr(const char *s1, const char *s2) Tìm kiếm sự xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1 int strcmp(const char *s1, const char *s2) Hai chuỗi s1 và s2 được so sánh với nhau, kết quả trả về là một số nguyên(0;1;-1) int strcmp(const char*s1, const char *s2) So sánh trong n ký tự đầu tiên của 2 chuỗi s1 và s2 memset(cha...

docx6 trang | Chia sẻ: Khủng Long | Lượt xem: 1164 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Lớp string trong stl, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Lớp String trong STL I/Khái Niệm: Chuỗi là một hàng gồm các kí tự liên tục nhau, các kí tự ở đây rất đa dạng có thể là chữ số, chữ cái, dấu cách, kí hiệu số lượng kí tự rất lớn(216 kí tự) và kết thúc bằng kí tự ‘\0’. II/Chuỗi trong C++: Các Hàm Thao TácThông Thường Trong C: int strlen(const char* s) Xác định độ dài một chuỗi char toupper(char c) Chuyển đổi một ký tự thường thành ký tự hoa char* strupr(char *s) Chuyển đổi chuỗi chữ thường thành chuỗi chữ hoa char *strlwr(char *s) Chuyển đổi chuỗi chữ hoa thành chuỗi toàn chữ thường char *strncpy(char *Des, const char *Source, size_t n) Chép n ký tự đầu tiên của chuỗi nguồn sang chuỗi đích char* strstr(const char *s1, const char *s2) Tìm kiếm sự xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1 int strcmp(const char *s1, const char *s2) Hai chuỗi s1 và s2 được so sánh với nhau, kết quả trả về là một số nguyên(0;1;-1) int strcmp(const char*s1, const char *s2) So sánh trong n ký tự đầu tiên của 2 chuỗi s1 và s2 memset(char *Des, int c, size_t n) Đặt n ký tự đầu tiên của chuỗi là ký tự c int atoi(const char *s) Chuyển chuỗi thành số nguyên long atol(const char *s) Chuyển chuỗi thành số nguyên dài float atof(const char *s) Chuyển chuỗi thành số thực Nhược điễm dễ thấy là các hàm này là chỉ thao tác trên một chuỗi và khi thao tác nhiều chuỗi thì công việc rất phức tạp, ngoài ra nó con một vài rắc rối nữa là: Phải chủ động kiểm soát bộ nhớ cấp phát cho chuỗi ký tự. Không thể gán giá trị hay sử dụng phép toán cộng(+),trừ(-),nhân(*),chia(/). Nếu dùng kỹ thuật cấp phát động thì phải quán xuyến việc cấp thêm bộ nhớ khi chuỗi dãn ra và phải hủy bộ nhớ (khi không dùng nữa) để tiết kiệm bộ nhớ. Chính vì vậy mà trong C++ ngoài khả năng sử dụng các hàm của C trong chuỗi thì nó còn có STL (Standard Template Library) hỗ trợ việc lập trình với chuỗi dễ dàng hơn. Để sử dụng thư viện string chúng ta cần khai báo #include Các phép toán và phương thức cơ bản Phép cộng (+) s=str1+str2; Ghép hai chuỗi và cũng để ghép một ký tự vào chuỗi Các phép so sánh (==; !=; ; >= ;<=) So sánh theo thứ tự từ điển length( ) và phép lấy chỉ số [ ] Duyệt từng ký tự của chuỗi Phép gán (=) Gán string bằng một hằng chuỗi substr(int pos, int nchar) Trích ra chuỗi con của một chuỗi cho trước insert( ) Chèn thêm ký tự hay chuỗi vào một vị trí nào đó của chuỗi str cho trước 1/str.insert(int pos, char* s) chèn s vào vị trí pos của str; 2/str.insert(int pos, string s) chèn chuỗi s vào vị trí pos của chuỗi str; 3/str.insert(int pos, int n, int ch) chèn n lần ký tự ch vào vị trí pos của chuỗi str; str.erase(int pos, int n) Xóa n ký tự của chuỗi str kể từ vị trí pos VD1/ // Ghép chuỗi #include #include using namespace std; int main () { string name ("John"); string family ("Smith"); name += " K. "; // c-string name += family; // string name += '\n'; // character cout << name; return 0; } VD2/ // Xóa kí tự trong chuỗi #include #include using namespace std; int main () { string str ("This is an example phrase."); string::iterator it; // erase used in the same order as described above: str.erase (10,8); cout << str << endl; // "This is an phrase." it=str.begin()+9; str.erase (it); cout << str << endl; // "This is a phrase." str.erase (str.begin()+5, str.end()-7); cout << str << endl; // "This phrase." return 0; } Tìm kiếm và thay thế find( ) Kiếm xem một ký tự hay một chuỗi nào đó có xuất hiện trong một chuỗi cho trước hay không. 1/str.find(int ch, int pos = 0) tìm ký tự ch kể từ vị trí pos đến cuối chuỗi str 2/str.find(char *s, int pos = 0) tìm s (mảng ký tự kết thúc ‘\0’) kể từ vị trí pos đến cuối 3/str.find(string& s, int pos = 0) tìm chuỗi s kể từ vị trí pos đến cuối chuỗi. replace( ) Thay thế một đoạn con trong chuỗi str cho trước. str.replace(int pos, int nchar, char *s); str.replace(int pos, int nchar, string s); str.replace(int pos, int nchar, int n, int ch); VD/ // Tìm trong chuỗi #include #include using namespace std; int main () { string str ("There are two needles in this haystack with needles."); string str2 ("needle"); size_t found; // different member versions of find in the same order as above: found=str.find(str2); if (found!=string::npos) cout << "first 'needle' found at: " << int(found) << endl; found=str.find("needles are small",found+1,6); if (found!=string::npos) cout << "second 'needle' found at: " << int(found) << endl; found=str.find("haystack"); if (found!=string::npos) cout << "'haystack' also found at: " << int(found) << endl; found=str.find('.'); if (found!=string::npos) cout << "Period found at: " << int(found) << endl; // let's replace the first needle: str.replace(str.find(str2),str2.length(),"preposition"); cout << str << endl; return 0; } Ghi chú: bài viết có trích một vài thông tin từ các nguồn sau: Bài đọc thêm cho môn Lập trình HĐT với C++(Thầy Trần Đan Thư). Nhập môn lập trình(KHTN). Wikipedia.org. Một Vài ví dụ được trích từ cplusplus.com. Lớp Vector trong STL Đối tượng vector giống như một mảng thông thường, có thể truy xuất qua chỉ mục[], tuy nhiên nó có thể mở rộng kích thước tùy ý. Một số phương thức trong lớp vector: clear() Xóa tất cả các phần tử trong mảng empty() Kiểm tra mảng rỗng hay không earse() Xóa một hoặc một dãy các phần tử front(),back() Trả vê phần tử đầu(cuối) của mảng insert() Thêm một phần tử vào vị trí bất kì pop_back();push_back() Xóa, thêm một phần tử vào phía sau mảng reserve() Cấp phát sẵn một bộ nhớ tối thiểu size() Trả về kích thước của mảng resize() Điều chỉnh lại kích thước của mảng Các ưu điểm/nhược điểm: Ưu điểm: mang bản chất là mảng nên việc truy xuất ngẩu nhiên nhanh chóng. Nhược điểm: khi chèn một đối tượng vào vị trí bất kì (trừ vị trí cuối) khá khó khăn. Khi mảng đầy hệ thống sẽ gọi tạo vùng nhớ mới và chép các đối tượng của mảng đã đầy vào mảng mới sau đó sẽ xóa mảng đầy này nên hàm constructor và destructor bị gọi nhiều lần.Có hai cách giải quyết vấn đề này: Nếu biết trước kích thước mảng thì lúc đầu thì sẽ gọi cấp một vùng nhớ có kích thước như yêu cầu. Còn không thì có thể sử dụng một lớp khác tương tự như lớp dqeue cho phép thêm phần tử ở hai đầu, tuy nhiên tốc đỗ sẽ chậm hơn.

Các file đính kèm theo tài liệu này:

  • docxtailieu.docx