1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lớp string và vector trong thư viện STL

6 3 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 118,71 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các Hàm Thao TácThông Th ờng Trong C: int strlenconst char* s Xác định độ dài một chuỗi char toupperchar c Chuy ển đổi một ký tự thường thành ký tự hoa char* struprchar *s Chuy ển đổi

Trang 1

L ớp String trong STL

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’

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

Trang 2

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 <string>

a) 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

Trang 3

VD1/

// Ghép chuỗi

#include <iostream>

#include <string>

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 <iostream>

#include <string>

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;

}

Trang 4

b) 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 <iostream>

#include <string>

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;

}

Trang 5

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

Trang 6

 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

o 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

o 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

Ngày đăng: 18/10/2022, 14:48

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w