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...
6 trang |
Chia sẻ: Khủng Long | Lượt xem: 1164 | Lượt tải: 0
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:
- tailieu.docx