Cách sử dụng C ++ String Class

How Use C String Class



Một chuỗi ký tự là một chuỗi các ký tự trong một con trỏ mảng hằng số được kết thúc bằng ký tự nul, 0. Khi được xác định, bởi một biến, chuỗi ký tự không thể thực sự giảm hoặc tăng độ dài. Nhiều hoạt động không thể được thực hiện trên chuỗi ký tự. Vì vậy, cần có một lớp chuỗi. Lớp chuỗi C ++ dành cho một cấu trúc dữ liệu, một tập hợp các ký tự theo thứ tự, cho phép các hàm thành viên và toán tử hoạt động trên các ký tự. Lớp chuỗi cho phép nhiều thao tác hơn trên chuỗi ký tự tương ứng, thay vì chỉ chuỗi ký tự. Bạn cần có kiến ​​thức tốt về chuỗi ký tự để hiểu được bài viết này.

Lớp và Đối tượng

Lớp là một tập hợp các biến và hàm hoạt động cùng nhau; trong đó các biến không có giá trị được gán cho. Khi các giá trị được gán cho các biến, lớp sẽ trở thành một đối tượng. Các giá trị khác nhau được cung cấp cho cùng một lớp dẫn đến các đối tượng khác nhau; nghĩa là, các đối tượng khác nhau là cùng một lớp với các giá trị khác nhau. Tạo một đối tượng từ một lớp được cho là khởi tạo đối tượng.







Tên, chuỗi, là một lớp. Một đối tượng được tạo từ lớp chuỗi có tên do người lập trình chọn.



Một hàm thuộc về lớp là cần thiết để khởi tạo một đối tượng từ lớp. Trong C ++, hàm đó có cùng tên với tên của lớp. Các đối tượng được tạo (khởi tạo) từ lớp có các tên khác nhau do người lập trình đặt cho chúng.



Tạo một đối tượng từ một lớp có nghĩa là xây dựng đối tượng; nó cũng có nghĩa là tức thời.





Một chương trình C ++ sử dụng lớp chuỗi, bắt đầu bằng các dòng sau ở đầu tệp:

#bao gồm
#bao gồm
sử dụng không gian tên std;

Dòng đầu tiên là đầu vào / đầu ra. Dòng thứ hai là cho phép chương trình sử dụng tất cả các tính năng của lớp chuỗi. Dòng thứ ba cho phép chương trình sử dụng các tên trong không gian tên tiêu chuẩn.



Quá tải một chức năng

Khi hai hoặc nhiều chữ ký chức năng khác nhau có cùng tên, tên đó được cho là quá tải. Khi một hàm được gọi, số lượng và kiểu đối số sẽ xác định hàm nào được thực thi.

Sự thi công

dây()
Câu lệnh sau đây xây dựng một chuỗi có độ dài bằng 0 không có ký tự nào.

chuỗi strCol=dây();

Nó bắt đầu bằng tên của lớp (kiểu đối tượng), chuỗi. Tiếp theo là tên cho chuỗi đối tượng, do người lập trình đưa ra. Toán tử gán sau; sau đó là tên của phương thức khởi tạo có dấu ngoặc trống. Ở đây, strCol là đối tượng được khởi tạo với tất cả các thành viên dữ liệu (thuộc tính) và các hàm thành viên (phương thức).
chuỗi (str)
Điều này tương tự như ở trên, nhưng lấy một chuỗi ký tự hoặc một mã định danh làm đối số, trong hàm tạo. Câu lệnh sau minh họa điều này:

chuỗi strCol=dây('Tôi yêu em');

Xây dựng với danh sách khởi tạo

Đoạn mã sau minh họa điều này:

chuỗi strCol=dây({'TÔI','','NS','hoặc','v','Và','','và','hoặc','u',' 0'});

Nghĩa đen của chuỗi là anh yêu em. Lưu ý ký tự nul ở cuối danh sách trình khởi tạo.

chuỗi (str, n)

Điều này tạo thành một tập hợp chuỗi, gồm n ký tự đầu tiên của một chuỗi khác. Đoạn mã sau minh họa điều này:

charP[] = 'Tôi yêu em';
chuỗi strCol=dây(P, 6);
Giá cả<<strCol<< ' ';

Đầu ra là I love với 6 ký tự đầu tiên của I love you. Hãy nhớ rằng: khoảng trắng duy nhất là một ký tự.

chuỗi (str, pos, n)

Điều này tạo thành một tập hợp chuỗi gồm n ký tự, bắt đầu từ vị trí được lập chỉ mục dựa trên 0, pos, của một chuỗi khác. Đoạn mã sau minh họa điều này:

charP[] = 'Tôi yêu em';
chuỗi strCol=dây(P, 2, 4);
Giá cả<<strCol<< ' ';

Đầu ra là tình yêu.

Đối với hai trường hợp trên, nếu n lớn hơn kích thước của chuỗi, ngoại lệ out_of_range sẽ được ném ra - xem sau.

string (n, ‘c’)

Tạo thành một tập hợp gồm n ký tự, trong đó tất cả các ký tự đều giống nhau. Xem xét,

chuỗi strCol=dây(5,'Và');
Giá cả<<strCol<< ' ';

Đầu ra là, eeeee, 5 e’s.

Gán một chuỗi

Một chuỗi có thể được gán như sau, sau khi đã khai báo cả hai chuỗi:

chuỗi strCol1=dây('Tôi yêu em');
chuỗi strCol2;
strCol2=strCol1;
Giá cả<<strCol2<< ' ';

Đầu ra là, anh yêu em.

Xây dựng với Iterator

Một trình lặp cung cấp một đại diện chung của quá trình quét, thông qua các giá trị của một tập hợp. Cú pháp để tạo một chuỗi với trình lặp, là:

bản mẫu<class InputIterator>
basic_string(InputIterator bắt đầu,Kết thúc InputIterator, hăng sôNgười phân bổ&
đến=Người phân bổ());

Điều này tạo ra một chuỗi cho phạm vi [bắt đầu, kết thúc) - xem chi tiết sau.

Phá hủy một chuỗi

Để hủy một chuỗi, chỉ cần để nó ra khỏi phạm vi.

Quyền truy cập phần tử lớp chuỗi

Một đối tượng chuỗi được khởi tạo có thể được lập chỉ mục con (được lập chỉ mục) giống như một mảng. Việc đếm chỉ số bắt đầu từ số không.

stringName [i]

Hoạt động stringName [i] trả về một tham chiếu đến ký tự (phần tử) tại iNSchỉ mục của bộ sưu tập ký tự. Đoạn mã sau xuất v:

chuỗi strCol=dây('Tôi yêu em');
charch=strCol[4];
Giá cả<<ch<< ' ';

stringName [i] const

Hoạt động stringName [i] const được thực thi thay vì stringName [i] khi đối tượng chuỗi là một đối tượng hằng. Ví dụ: nó được sử dụng trong đoạn mã sau:

hăng sôchuỗi strCol=dây('Tôi yêu em');
charch=strCol[4];
Giá cả<<ch<< ' ';

Biểu thức trả về một tham chiếu không đổi đến iNSphần tử của đối tượng chuỗi. Không phần tử nào của chuỗi có thể thay đổi được.

Chỉ định một nhân vật với chỉ số phụ

Một ký tự có thể được gán cho một đối tượng chuỗi không phải là hằng số, như sau:

chuỗi strCol=dây('Tôi gọi');
strCol[2] = 'NS';
Giá cả<<strCol<< ' ';

Đầu ra là tôi rơi. ‘C’ đã được đổi thành ‘f’.

stringName.at (i)

stringName.at (i) tương tự như stringName [i], nhưng stringName.at (i) đáng tin cậy hơn. Đoạn mã sau cho biết cách nó sẽ được sử dụng:

chuỗi strCol=dây('Tôi yêu em');
charch=strCol.tại(4);
Giá cả<<ch<< ' ';

at () thực sự là một hàm thành viên lớp chuỗi.

stringName.at (i) const

stringName.at (i) const tương tự như stringName [i] const, nhưng stringName.at (i) const đáng tin cậy hơn. stringName.at (i) const được thực thi thay vì stringName.at (i) khi đối tượng chuỗi là một đối tượng chuỗi không đổi. Nó được sử dụng trong đoạn mã sau, ví dụ:

hăng sôchuỗi strCol=dây('Tôi yêu em');
charch=strCol.tại(4);
Giá cả<<ch<< ' ';

at () const thực sự là một hàm thành viên lớp chuỗi.

Gán giá trị bằng hàm at ()

Một giá trị có thể được gán cho một đối tượng chuỗi không phải là hằng số, với hàm at (), như sau:

chuỗi strCol=dây('Tôi gọi');
strCol.tại(2) = 'NS';
Giá cả<<strCol<< ' ';

Đầu ra là tôi rơi.

Sự cố với tập lệnh phụ

Vấn đề với tập lệnh con (lập chỉ mục) là nếu chỉ mục nằm ngoài phạm vi, kết quả sai có thể nhận được hoặc có thể xảy ra lỗi trong thời gian chạy.

đằng trước()

Điều này trả về một tham chiếu đến phần tử đầu tiên của đối tượng chuỗi, mà không xóa phần tử. Đầu ra của đoạn mã sau là ‘I’.

chuỗi strCol=dây('Tôi yêu em');
charch=strCol.đằng trước();
Giá cả<<ch<< ' ';

Ký tự không bị xóa khỏi đối tượng chuỗi.

front () const

Khi cấu trúc đối tượng chuỗi được đặt trước bởi const, biểu thức front () const được thực thi thay vì front (). Ví dụ, nó được sử dụng trong đoạn mã sau.

hăng sôchuỗi strCol=dây('Tôi yêu em');
charch=strCol.đằng trước();
Giá cả<<ch<< ' ';

Một tham chiếu không đổi được trả về. Phần tử không bị xóa khỏi đối tượng chuỗi. Không có ký tự nào có thể được thay đổi cho một đối tượng chuỗi không đổi.

mặt sau()

Điều này trả về một tham chiếu đến phần tử cuối cùng của đối tượng chuỗi mà không xóa phần tử. Đầu ra của đoạn mã sau là ‘u’.

chuỗi strCol=dây('Tôi yêu em');
charch=strCol.mặt sau();
Giá cả<<ch<< ' ';

back () const

Khi cấu trúc đối tượng chuỗi được đặt trước bởi const, biểu thức back () const được thực thi thay vì back (). Ví dụ, nó được sử dụng trong đoạn mã sau.

hăng sôchuỗi strCol=dây('Tôi yêu em');
charch=strCol.mặt sau();
Giá cả<<ch<< ' ';

Một tham chiếu không đổi được trả về. Phần tử không bị xóa khỏi đối tượng chuỗi.

Dung lượng chuỗi

size_type dung lượng () const noexcept

Tổng số ký tự mà chuỗi có thể chứa mà không yêu cầu phân bổ lại, được trả về bởi hàm thành viên dung lượng này. Một đoạn mã cho điều này là:

chuỗi strCol=dây();
NStrên một=strCol.sức chứa();
Giá cả<<trên một<< ' ';

Đầu ra là 15 trên máy tính của tôi.

dự trữ (n)

Dung lượng bộ nhớ không phải lúc nào cũng có sẵn trong cửa hàng miễn phí. Không gian thêm có thể được đặt trước. Hãy xem xét đoạn mã sau:

chuỗi strCol=dây('yêu quý');
strCol.dự trữ(6);
Giá cả<<strCol.sức chứa() << ' ';

Đầu ra là 15 trên máy tính của tôi.

size () const noexcept

Điều này trả về số ký tự trong chuỗi. Đoạn mã sau minh họa:

chuỗi strCol=dây('Tôi yêu em');
NStrên một=strCol.kích thước();
Giá cả<<trên một<< ' ';

Đầu ra là 10, không bao gồm ký tự nul, 0.

length () const noexcept

-giống như kích thước().
Ghi chú:kích thước() <=sức chứa().

thu nhỏ để phù hợp với()

Có thể giảm dung lượng () xuống size () bằng cách phân bổ lại; nó không bắt buộc. Đoạn mã sau minh họa điều này:

chuỗi strCol=dây('Tôi yêu em');
strCol.dự trữ(12);
strCol.thu nhỏ để phù hợp với();
NSNS=strCol.kích thước();
Giá cả<<NS<< ' ';

Đầu ra là 10 chứ không phải 12 hoặc 16. Hàm trả về giá trị void.

thay đổi kích thước (sz), thay đổi kích thước (sz, ’c’)

Điều này thay đổi kích thước chuỗi. Nếu kích thước mới nhỏ hơn kích thước cũ, thì các phần tử ở cuối sẽ bị xóa. Nếu kích thước mới dài hơn, thì một số ký tự mặc định sẽ được thêm vào cuối. Để thêm một ký tự cụ thể, hãy sử dụng hàm resize () với hai đối số. Đoạn mã sau minh họa việc sử dụng hai hàm:

chuỗi strCol=dây('Tôi yêu em');
strCol.thay đổi kích thước(6);
Giá cả<< 'Kích thước mới của strCol:' <<strCol.kích thước() << ' ';
chuỗi strCol1=dây('Tôi yêu', 'Và');
strCol1.thay đổi kích thước(12);
Giá cả<< 'Kích thước mới của strCol1:' <<strCol1.kích thước() << ' ';

Đầu ra là:

Kích thước mới của strCol: 6
Kích thước mới của strCol1: 12
Hàm trả về giá trị void.

clear () noexcept

Xóa tất cả các phần tử khỏi chuỗi, như đoạn mã sau minh họa:

chuỗi strCol=dây('Tôi yêu em');
strCol.sạch();
Giá cả<<strCol.kích thước() << ' ';

Kết quả đầu ra là 0. Hàm trả về giá trị void.

rỗng () const noexcept

Điều này trả về 1 cho true nếu không có ký tự nào trong đối tượng chuỗi hoặc 0 cho false nếu đối tượng chuỗi không trống. Đoạn mã sau minh họa điều này:

chuỗi strCol1=dây('Tôi yêu em');
Giá cả<<strCol1.trống() << ' ';
chuỗi strCol2=dây();
Giá cả<<strCol2.trống() << ' ';

Đầu ra là:

0
1

Trả lại các trình lặp lại và lớp chuỗi

Một trình lặp giống như một con trỏ nhưng có nhiều chức năng hơn con trỏ.

begin () noexcept

Trả về một trình lặp trỏ đến ký tự đầu tiên (phần tử) của đối tượng chuỗi, như trong đoạn mã sau:

chuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::người lặp lạiiter=strCol.bắt đầu();
Giá cả<< *iter<< ' ';

Đầu ra là ‘I’. Lưu ý cách khai báo nhận trình lặp, đã được khai báo. Trình lặp được tham chiếu đến trong biểu thức trả về để nhận giá trị, theo cách tương tự, con trỏ được tham chiếu.

begin () const noexcept;

Trả về một trình lặp trỏ đến phần tử đầu tiên của tập hợp đối tượng chuỗi. Khi cấu trúc đối tượng được đặt trước bởi const, biểu thức begin () const được thực thi thay vì begin (). Trong điều kiện này, không thể sửa đổi phần tử tương ứng trong đối tượng. Ví dụ, nó được sử dụng trong đoạn mã sau.

hăng sôchuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::const_iteratoriter=strCol.bắt đầu();
Giá cả<< *iter<< ' ';

Đầu ra là ‘I’. Lưu ý rằng const_iterator đã được sử dụng lần này, thay vì chỉ trình lặp, để nhận trình lặp được trả về.

end () noexcept

Trả về một trình lặp trỏ ngay bên ngoài phần tử cuối cùng của đối tượng chuỗi. Hãy xem xét đoạn mã sau:

chuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::người lặp lạiiter=strCol.kết thúc();
Giá cả<< *iter<< ' ';

Đầu ra là null, không có gì, vì không có phần tử cụ thể nào ngoài phần tử cuối cùng.

end () const noexcept

Trả về một trình lặp trỏ ngay bên ngoài phần tử cuối cùng của đối tượng chuỗi. Khi cấu trúc đối tượng chuỗi được đặt trước bởi const, biểu thức end () const được thực thi thay vì end (). Hãy xem xét đoạn mã sau:

hăng sôchuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::const_iteratoriter=strCol.kết thúc();
Giá cả<< *iter<< ' ';

Đầu ra là null. Lưu ý rằng const_iterator đã được sử dụng lần này, thay vì chỉ trình lặp, để nhận trình lặp được trả về.

Lặp lại đảo ngược

Có thể có một trình lặp lặp lại từ phần cuối thực tế đến ngay trước phần tử đầu tiên:

rbegin () noexcept

Trả về một trình lặp trỏ đến phần tử cuối cùng của đối tượng khởi tạo chuỗi, như trong đoạn mã sau:

chuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::reverse_iteratoriter=strCol.rbegin();
Giá cả<< *iter<< ' ';

Đầu ra là ‘u’. Lưu ý cách khai báo nhận trình lặp ngược, đã được khai báo. Trình lặp được tham chiếu đến trong biểu thức trả về để nhận giá trị, theo cách tương tự, con trỏ được tham chiếu.

rbegin () const noexcept;

Trả về một trình lặp trỏ đến phần tử cuối cùng của đối tượng chuỗi. Khi cấu trúc đối tượng được đặt trước bởi const, biểu thức rbegin () const được thực thi thay vì rbegin (). Trong điều kiện này, không thể sửa đổi phần tử tương ứng trong đối tượng. Ví dụ, tính năng được sử dụng trong đoạn mã sau.

hăng sôchuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::const_reverse_iteratoriter=strCol.rbegin();
Giá cả<< *iter<< ' ';

Đầu ra là ‘u’. Lưu ý rằng const_reverse_iterator đã được sử dụng lần này, thay vì chỉ reverse_iterator, để nhận trình lặp được trả về.

render () noexcept

Trả về một trình lặp trỏ ngay trước phần tử đầu tiên của đối tượng chuỗi. Hãy xem xét đoạn mã sau:

chuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::reverse_iteratoriter=strCol.làm cho();
Giá cả<< *iter<< ' ';

Đầu ra là null, không có gì, vì không có phần tử cụ thể nào ngay trước phần tử đầu tiên.

render () const noexcept

Trả về một trình lặp trỏ ngay trước phần tử đầu tiên của đối tượng chuỗi. Khi cấu trúc đối tượng được đặt trước bởi const, biểu thức rend () const được thực thi thay vì rend (). Hãy xem xét đoạn mã sau:

hăng sôchuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::const_reverse_iteratoriter=strCol.làm cho();
Giá cả<< *iter<< ' ';

Đầu ra là null. Lưu ý rằng const_reverse_iterator đã được sử dụng lần này, thay vì chỉ reverse_iterator, để nhận trình lặp được trả về.

Công cụ sửa đổi chuỗi

Một công cụ sửa đổi sửa đổi đối tượng chuỗi, cũng có thể lấy hoặc trả về một trình vòng lặp.

Xuất hiện

basic_string&nhà điều hành+ =(hăng sôbasic_string&P)

Thêm đối tượng chuỗi bên phải vào đối tượng chuỗi bên trái. Thí dụ:

chuỗi strCol1=dây('Tôi yêu');
chuỗi strCol2=dây(' bạn');
strCol1+ =strCol2;
Giá cả<<strCol1<< ' ';

Đầu ra là anh yêu em. Đừng quên rằng strCol1 + = strCol2 giống như strCol1 = strCol1 + strCol2.

basic_string & operator + = (const charT * s)

Thêm một chuỗi ký tự vào một tập hợp đối tượng chuỗi. Thí dụ:

chuỗi strCol=dây('Tôi yêu');
strCol+ = ' bạn';
Giá cả<<strCol<< ' ';

Đầu ra: Tôi yêu bạn.

basic_string & operator + = (charT c)

Thêm một ký tự vào một chuỗi đối tượng. Thí dụ:

chuỗi strCol=dây('Tôi yêu bạn');
strCol+ = 'u';
Giá cả<<strCol<< ' ';

Đầu ra: Tôi yêu bạn.

basic_string & operator + = (initializer_list)

Thêm danh sách trình khởi tạo. Thí dụ:

chuỗi strCol=dây('Tôi yêu');
strCol+ = {'','và','hoặc','u',' 0'};
Giá cả<<strCol<< ' ';

Đầu ra: Tôi yêu bạn. Luôn luôn tốt nếu thêm nul, 0 vào cuối danh sách bộ khởi tạo ký tự.

basic_string & append (const basic_string & str)

Thêm đối tượng chuỗi đối số vào đối tượng chuỗi chính. Thí dụ:

chuỗi strCol1=dây('Tôi yêu');
chuỗi strCol2=dây(' bạn');
strCol1.nối thêm(strCol2);
Giá cả<<strCol1<< ' ';

Đầu ra: Tôi yêu bạn.

basic_string & append (const charT * s)

Thêm đối số là chuỗi ký tự vào chuỗi chính. Thí dụ

chuỗi strCol=dây('Tôi yêu');
strCol=strCol.nối thêm(' bạn');
Giá cả<<strCol<< ' ';

Đầu ra: Tôi yêu bạn.

basic_string & append (initializer_list)

Thêm danh sách trình khởi tạo, là một đối số, vào chuỗi chính. Thí dụ:

chuỗi strCol=dây('Tôi yêu');
strCol=strCol.nối thêm({'','và','hoặc','u',' 0'});
Giá cả<<strCol<< ' ';

Đầu ra: Tôi yêu bạn. Luôn luôn tốt nếu thêm ký tự nul, 0 vào cuối danh sách trình khởi tạo.

basic_string & append (size_type n, charT c)

Thêm n của cùng một ký tự. Thí dụ:

chuỗi strCol=dây('chuyển hướng');
strCol=strCol.nối thêm(2, 'hoặc');
Giá cả<<strCol<< ' ';

Đầu ra: điều cấm kỵ.

basic_string & append (const charT * s, size_type n)

Thêm n phần tử đầu tiên của một chuỗi ký tự vào đối tượng chuỗi chính. Thí dụ:

chuỗi strCol=dây('Tôi yêu');
strCol=strCol.nối thêm('bạn cũng vậy', 4);
Giá cả<<strCol<< ' ';

Đầu ra là: I love you. Nếu n lớn hơn độ dài của chữ, một ngoại lệ length_error sẽ được ném ra.

basic_string & append (const basic_string & str, size_type pos, size_type n = npos)

Thêm n ký tự từ chỉ mục, vị trí vào chuỗi chính. Thí dụ:

chuỗi strCol=dây('Tôi yêu');
strCol=strCol.nối thêm('ve you so', 2, 4);
Giá cả<<strCol<< ' ';

Đầu ra: Tôi yêu bạn. Một ngoại lệ cũng sẽ được ném ở đây, xem sau.

Phân công

basic_string&giao phó(hăng sôbasic_string&P)

Gán đối tượng chuỗi đối số cho chuỗi chính, thay thế bất kỳ nội dung nào ở đó.

chuỗi strCol1=dây('Tôi yêu em');
chuỗi strCol2=dây('Cô ấy cần tôi');
strCol1=strCol1.giao phó(strCol2);
Giá cả<<strCol1<< ' ';

Đầu ra: Cô ấy cần tôi.

basic_string&giao phó(hăng sôđồ thị*NS)

Gán một đối số là chuỗi ký tự cho chuỗi chính, thay thế bất kỳ nội dung nào ở đó.

chuỗi strCol=dây('Tôi yêu em');
strCol=strCol.giao phó('Cô ấy cần tôi');
Giá cả<<strCol<< ' ';

Đầu ra: Cô ấy cần tôi.

basic_string&giao phó(Initializer_list<đồ thị>)

Gán đối số danh sách trình khởi tạo cho chuỗi chính,thay thế bất kỳ nội dung nào ở đó.
[cc lang='NS'trốn thoát='thật'chiều rộng='780']
chuỗi strCol=dây('Tôi yêu em');
strCol=strCol.giao phó({'NS','NS','Và','','n','Và','Và','NS','NS','','NS','Và',' 0'});
Giá cả<<strCol<< ' ';

Đầu ra: Cô ấy cần tôi. Sẽ rất tốt nếu bạn luôn thêm nul, 0 vào cuối danh sách ký tự, để tạo thành một chuỗi ký tự.

basic_string&giao phó(hăng sôđồ thị*NS,size_type n)

Gán n ký tự đầu tiên của đối số dạng chuỗi cho chuỗi chính, thay thế bất kỳ nội dung nào ở đó.

chuỗi strCol=dây('Tôi yêu em');
strCol=strCol.giao phó('Cô ấy cần tôi', 9);
Giá cả<<strCol<< ' ';

Đầu ra: Cô ấy cần.

basic_string&giao phó(size_type n,charT c)

Gán một đối số gồm n ký tự giống nhau cho chuỗi chính, thay thế bất kỳ nội dung nào ở đó.

chuỗi strCol=dây('Tôi yêu em');
strCol=strCol.giao phó(4, 'Và');
Giá cả<<strCol<< ' ';

Đầu ra: eeee

basic_string&giao phó(hăng sôbasic_string&P,size_type pos,
size_type n=npos)

Gán n ký tự của đối số đối tượng chuỗi, bắt đầu từ pos, cho chuỗi chính, thay thế bất kỳ nội dung nào ở đó.

chuỗi strCol=dây('Tôi yêu em');
strCol=strCol.giao phó('Cô ấy cần tôi', 4, 5);
Giá cả<<strCol<< ' ';

Đầu ra: nhu cầu. Sẽ ném một ngoại lệ - xem sau.

Chèn

basic_string&chèn(size_type pos, hăng sôbasic_string&P)

Chèn đối số đối tượng chuỗi vào chuỗi chính, tại chỉ mục, vị trí.

chuỗi strCol1=dây('Tôi yêu em');
chuỗi strCol2=dây('ghét và');
strCol1=strCol1.chèn(2,strCol2);
Giá cả<<strCol1<< ' ';

Đầu ra: Tôi ghét và yêu em. Sẽ ném một ngoại lệ - xem sau.

basic_string&chèn(size_type pos1, hăng sôbasic_string&
P,size_type pos2,size_type n=npos)

Chèn độ dài n ký tự từ pos2 của đối số đối tượng chuỗi, vào chuỗi chính, tại chỉ mục, pos1.

chuỗi strCol1=dây('Tôi yêu em');
chuỗi strCol2=dây('ghét, muốn và cần');
strCol1=strCol1.chèn(2,strCol2, 6, 9);
Giá cả<<strCol1<< ' ';

Đầu ra: Tôi muốn và yêu em.

chèn trình lặp (const_iterator p, charT c)

Chèn một ký tự cụ thể, là một đối số, vào vị trí được trỏ đến bởi trình vòng lặp. Trả về một trình lặp cho vị trí của ký tự mới được chèn.

chuỗi strCol=dây('Tôi yêu em');
basic_string<char> ::người lặp lạiiter=strCol.bắt đầu();
++iter; ++iter; ++iter; ++iter; ++iter; ++iter;
basic_string<char> ::người lặp lạimạng=strCol.chèn(iter, 'NS');
Giá cả<< *mạng<< ' ';
Giá cả<<strCol<< ' ';

Đầu ra là:

'NS'

tôi yêu bạn

chèn trình lặp (const_iterator p, size_type n, charT c)

Chèn n của cùng một ký tự của đối số, vào vị trí, được trỏ tới bởi trình vòng lặp. Trả về một trình lặp cho vị trí bắt đầu của các ký tự giống nhau mới được chèn vào.

chuỗi strCol=dây('Tab trong đất.');
basic_string<char> ::người lặp lạiiter=strCol.bắt đầu();
++iter; ++iter; ++iter;
basic_string<char> ::người lặp lạimạng=strCol.chèn(iter, 2, 'hoặc');
Giá cả<< *mạng<< ' ';
Giá cả<<strCol<< ' ';

Đầu ra là:

'hoặc'

Những điều kiêng kỵ nơi đất khách.

basic_string&chèn(size_type pos, hăng sôđồ thị*NS)

Chèn một chuỗi đối số theo nghĩa đen tại chỉ mục, vị trí trong chuỗi chính.

chuỗi strCol=dây('Tab trong đất.');
strCol=strCol.chèn(3, 'oo');
Giá cả<<strCol<< ' ';

Đầu ra: Những điều cấm kỵ nơi đất khách.

basic_string&chèn(size_type pos, hăng sôđồ thị*NS,size_type n)

Chèn n ký tự đầu tiên của chuỗi đối số theo nghĩa đen, tại chỉ mục, vị trí trong chuỗi chính.

chuỗi strCol=dây('Tab trong đất.');
strCol=strCol.chèn(3, 'oooo', 2);
Giá cả<<strCol<< ' ';

Đầu ra: Những điều cấm kỵ nơi đất khách.

Thay thế

basic_string&thay thế(size_type pos1,size_type n1, hăng sôbasic_string&P))

Thay thế n1 ký tự trong đối tượng chuỗi chính từ chỉ mục, pos1, bằng đối tượng chuỗi đối số.

chuỗi strCol1=dây('Tôi yêu em');
chuỗi strCol2=dây('ghét bạn và');
strCol1=strCol1.thay thế(2, 4,strCol2);
Giá cả<<strCol1<< ' ';

Đầu ra: Tôi ghét bạn và bạn. Sẽ ném một ngoại lệ - xem sau.

basic_string&thay thế(size_type pos1,size_type n1, hăng sôbasic_string&
P,size_type pos2,size_type n2=npos)

Thay thế n1 ký tự trong đối tượng chuỗi chính từ chỉ mục, pos1, bằng n2 ký tự của đối tượng chuỗi đối số từ chỉ mục, pos2.

chuỗi strCol1=dây('Tôi yêu em');
chuỗi strCol2=dây('chúng tôi ghét anh ấy và cô ấy');
strCol1=strCol1.thay thế(2, 4,strCol2, 3, 12);
Giá cả<<strCol1<< ' ';

Đầu ra: Tôi ghét anh ta và bạn.

basic_string&thay thế(size_type pos1,size_type n1, hăng sôđồ thị*NS,
size_type n2)

Thay thế n1 ký tự trong đối tượng chuỗi chính từ chỉ mục, pos1, bằng n2 ký tự đầu tiên của đối số chuỗi ký tự.

chuỗi strCol1=dây('Tôi yêu em');
strCol1=strCol1.thay thế(2, 4, 'ghét anh ấy và cô ấy', 12);
Giá cả<<strCol1<< ' ';

Đầu ra: Tôi ghét anh ta và bạn.

basic_string & thay thế (vị trí size_type, size_type n, const charT * s)

Thay thế n ký tự trong đối tượng chuỗi chính từ chỉ mục, vị trí, bằng đối số chuỗi ký tự.

chuỗi strCol1=dây('Tôi yêu em');
strCol1=strCol1.thay thế(2, 4, 'ghét anh ta và');
Giá cả<<strCol1<< ' ';

Đầu ra: Tôi ghét anh ta và bạn.

basic_string&thay thế(size_type pos1,size_type n1,size_type n2,charT c)

Thay thế n1 ký tự trong đối tượng chuỗi chính từ chỉ mục, pos1, bằng n2 ký tự giống nhau của đối số.

chuỗi strCol1=dây('Một chiếc máy tính bảng tồi ở đó.');
strCol1=strCol1.thay thế(9, 3, 2, 'hoặc');
Giá cả<<strCol1<< ' ';

Đầu ra: Một điều cấm kỵ tồi tệ ở đó ..

xóa trình lặp (const_iterator p)

Loại bỏ một ký tự tại vị trí được trỏ đến bởi trình vòng lặp; sau đó trả về vị trí của trình lặp, hiện đã được ký tự bên cạnh ký tự này (hoặc end ()) chiếm giữ. Đoạn mã sau minh họa điều này:

chuỗi strCol=dây('A B C D');
basic_string<char> ::người lặp lạiiter=strCol.bắt đầu();
++iter; ++iter;
strCol.tẩy xóa(iter);
Giá cả<<strCol[0] << '' <<strCol[1] << '
'
<<strCol[2]<< ' ';

Đầu ra: a b d

basic_string&tẩy xóa(size_type pos= 0,size_type n=npos)

Xóa n ký tự khỏi chỉ mục, vị trí.

chuỗi strCol=dây('A B C D');
strCol.tẩy xóa(1, 2);
Giá cả<<strCol[0] << '' <<strCol[1] << ' ';

Đầu ra: a d

void push_back (charT c)

Để thêm một ký tự vào cuối chuỗi:

chuỗi strCol=dây('A B C D');
strCol.push_back('5');
Giá cả<<strCol<< ' ';

Đầu ra: abcd5

void pop_back ()

Xóa ký tự cuối cùng mà không trả lại ký tự đó. Kích thước của chuỗi giảm đi 1.

chuỗi strCol=dây('abcde');
strCol.pop_back();
Giá cả<<strCol<< ' ';

Đầu ra: abcd

void swap (basic_string & s)

Các ký tự của hai đối tượng chuỗi có thể được hoán đổi.

chuỗi strCol1=dây(<sự giúp đỡ='post-69618 -__ DdeLink__781_3724385525'>đến>'abcde');
chuỗi strCol2=dây('1234567');
strCol1.tráo đổi(strCol2);
Giá cả<<strCol1<< ' ';
Giá cả<<strCol2<< ' ';

Đầu ra là:

'1234567'
'abcde'

Hoạt động chuỗi

const charT * c_str () const noexcept

Trả về một con trỏ đến phần tử đầu tiên của chuỗi. Con trỏ có thể được tăng lên.

hăng sôchuỗi strCol=dây('abcde');
hăng sô char*P=strCol.c_str();
Giá cả<< *P<< ' ';
++P;
Giá cả<< *P<< ' ';

Đầu ra là:

đến
NS

Vì có hằng số thứ hai trong tiêu đề, chương trình không thể thay đổi bất kỳ ký tự nào trong chuỗi. Việc xây dựng được đặt trước bởi const.

const charT * data () const noexcept

Trả về một con trỏ đến phần tử đầu tiên của chuỗi. Con trỏ có thể được tăng lên.

hăng sôchuỗi strCol=dây('abcde');
hăng sô char*P=strCol.dữ liệu();
Giá cả<< *P<< ' ';
++P;
Giá cả<< *P<< ' ';

Đầu ra là:

đến
NS

Vì có hằng số thứ hai trong tiêu đề, chương trình không thể thay đổi bất kỳ ký tự nào trong chuỗi. Việc xây dựng được đặt trước bởi const.

basic_string substr (size_type pos = 0, size_type n = npos) const

Trả về một đối tượng chuỗi gồm n ký tự cho chuỗi con bắt đầu từ chỉ mục, pos.

hăng sôchuỗi strCol=dây('abcdefghij');
hăng sôchuỗi retStr=strCol.substr(2, 4);
Giá cả<<retStr<< ' ';

Đầu ra: cdef

find () Chức năng thành viên

size_type find (const basic_string & str, size_type pos = 0) const noexcept

Tìm kiếm một đối tượng chuỗi con bắt đầu từ chỉ mục, pos. Nếu tìm thấy, trả về phần đầu của chuỗi con trong chuỗi chính.

chuỗi strCol=dây('Chúng ta là thế giới!');
chuỗi strCol1=dây('NS');
NStrên một=strCol.tìm thấy(strCol1, 2);
Giá cả<<trên một<< ' ';

Đầu ra:

chỉ số: 7
Trả về -1, khi không tìm thấy.

size_type find (const charT * s, size_type pos = 0) const

Tìm kiếm một chuỗi ký tự phụ bắt đầu từ chỉ mục, vị trí. Nếu tìm thấy, trả về phần đầu của chuỗi con trong chuỗi chính.

chuỗi strCol=dây('Chúng ta là thế giới!');
NStrên một=strCol.tìm thấy('là', 0);
Giá cả<<trên một<< ' ';

Vì pos = 0 là mặc định, 0 trong đối số có thể đã bị bỏ qua.

Đầu ra: 3

Trả về -1, khi không tìm thấy.

size_type find (const charT * s, size_type pos, size_type n) const

Tìm kiếm n ký tự đầu tiên của chuỗi ký tự con bắt đầu từ chỉ mục, pos. Nếu tìm thấy, trả về phần đầu của chuỗi con trong chuỗi chính.

chuỗi strCol=dây('Cậu bé lớn nhất');
NStrên một=strCol.tìm thấy('to hơn', 1, 3);
Giá cả<<trên một<< ' ';

Đầu ra: 4

Trả về -1, khi không tìm thấy.

size_type find (charT c, size_type pos = 0) const

Tìm ký tự, c bắt đầu từ chỉ mục, vị trí. Nếu tìm thấy, trả về phần đầu của chuỗi con trong chuỗi chính. Nếu không tìm thấy, trả về -1.

chuỗi strCol=dây('Chúng ta là thế giới!');
NStrên một=strCol.tìm thấy('Với');
Giá cả<<trên một<< ' ';

Đầu ra: -1

Các hàm thành viên find () ngược sau tồn tại:

size_type rfind(hăng sôbasic_string&P,size_type pos=npos) hăng sôkhông có ngoại lệ;
size_type rfind(hăng sôđồ thị*NS,size_type pos=npos) hăng sô;
size_type rfind(hăng sôđồ thị*NS,size_type pos,size_type n) hăng sô;
size_type rfind(charT c,size_type pos=npos) hăng sô;

Chức năng thành viên so sánh

int so sánh (const basic_string & str) const noexcept

So sánh đối tượng chuỗi đối số với đối tượng chuỗi chính. Nếu chuỗi chính xuất hiện trước đối số (trong từ điển), nó sẽ trả về một số dương. Nếu nó xuất hiện sau chuỗi chính, nó sẽ trả về một số âm. Nếu hai chuỗi giống nhau, nó trả về số không.

chuỗi strCol1=dây('bầy đàn');
chuỗi strCol2=dây('Mọi người');
NStrên một=strCol1.đối chiếu(strCol2);
Giá cả<<trên một<< ' ';

Đầu ra: -13

int so sánh (const charT * s) const

Tương tự như trên, nhưng đối số là một chuỗi ký tự.

chuỗi strCol1=dây('Mọi người');
NStrên một=strCol1.đối chiếu('Mọi người');
Giá cả<<trên một<< ' ';

Đầu ra: 0

Toán tử chuỗi

Các toán tử này có thể áp dụng cho các đối tượng chuỗi và không nhất thiết phải là các ký tự chuỗi.

+

Nối hai đối tượng chuỗi và trả về nối.

chuỗi strCol1=dây('khiêu vũ trên');
chuỗi strCol2=dây(' mặt trăng');
chuỗi strCol=strCol1+strCol2;
Giá cả<<strCol<< ' ';

Đầu ra: khiêu vũ trên mặt trăng.

==

Trả về 1 cho true, nếu các đối tượng chuỗi giống nhau; và số 0 cho sai, nếu chúng không phải.

chuỗi strCol1=dây('khiêu vũ trên');
chuỗi strCol2=dây(' trên mặt trăng');
bool bl=strCol1==strCol2;
Giá cả<<bl<< ' ';

Đầu ra: 0

! =

Trả về 1 nếu các đối tượng chuỗi không giống nhau và trả về 0 nếu chúng giống nhau.

chuỗi strCol1=dây('khiêu vũ trên');
chuỗi strCol2=dây(' trên mặt trăng');
bool bl=strCol1! =strCol2;
Giá cả<<bl<< ' ';

Đầu ra: 1

<

Trả về 1, nếu toán hạng bên trái nhỏ hơn toán hạng bên phải theo từ điển hoặc bằng 0 nếu không.

chuỗi strCol1=dây('khiêu vũ trên');
chuỗi strCol2=dây(' trên mặt trăng');
bool bl=strCol1<strCol2;
Giá cả<<bl<< ' ';

Đầu ra: 0

Đối với các ký tự thông thường trong C ++, theo thứ tự tăng dần, các số đứng trước chữ hoa, trước chữ thường. Ký tự khoảng trắng đứng trước số 0 và tất cả chúng.

Các kiểu ký tự chuỗi chính trong C ++

char

Kiểu char là kiểu C ++ ban đầu và thường sẽ lưu trữ một ký tự trong 8 bit.

char16_t

Điều này lưu trữ một ký tự trong 16 bit.

char32_t

Điều này lưu trữ một ký tự trong 32 bit.

wchar_t

char16_t và char32_t là các ký tự rộng. wchar_t là một ký tự rộng thuộc quyền sở hữu và được xác định bởi việc triển khai.

Những loại này được gọi là tính trạng. Tuy nhiên, về mặt kỹ thuật, C ++ đề cập đến chúng như là các đặc điểm của các đặc điểm. Bài viết này đã tập trung vào loại ký tự. Cách tiếp cận với các loại khác hơi khác - xem sau.

Các chức năng thành viên hoạt động chuỗi khác

Chữ ký của các hàm hoạt động chuỗi khác là:

size_type find_first_of(hăng sôbasic_string&P,size_type pos= 0) hăng sôkhông có ngoại lệ;
size_type find_first_of(hăng sôđồ thị*NS,size_type pos,size_type n) hăng sô;
size_type find_first_of(hăng sôđồ thị*NS,size_type pos= 0) hăng sô;
size_type find_first_of(charT c,size_type pos= 0) hăng sô;
size_type find_last_of(hăng sôbasic_string&P,size_type pos=npos) hăng sôkhông có ngoại lệ;
size_type find_last_of(hăng sôđồ thị*NS,size_type pos,size_type n) hăng sô;
size_type find_last_of(hăng sôđồ thị*NS,size_type pos=npos) hăng sô;
size_type find_last_of(charT c,size_type pos=npos) hăng sô;
size_type find_first_not_of(hăng sôbasic_string&P,size_type pos= 0) hăng sôkhông có ngoại lệ;
size_type find_first_not_of(hăng sôđồ thị*NS,size_type pos,size_type n) hăng sô;
size_type find_first_not_of(hăng sôđồ thị*NS,size_type pos= 0) hăng sô;
size_type find_first_not_of(charT c,size_type pos= 0) hăng sô;
size_type find_last_not_of(hăng sôbasic_string&P,size_type pos=npos) hăng sôkhông có ngoại lệ;
size_type find_last_not_of(hăng sôđồ thị*NS,size_type pos,size_type n) hăng sô;
size_type find_last_not_of(hăng sôđồ thị*NS,size_type pos=npos) hăng sô;
size_type find_last_not_of(charT c,size_type pos=npos) hăng sô;

Phần kết luận

C ++ có các ký tự chuỗi và các đối tượng chuỗi. Đối tượng string có một tập hợp các ký tự theo thứ tự, tương tự như một mảng các ký tự trong chuỗi. Sự khác biệt giữa tập hợp chuỗi và một mảng, là tập hợp chuỗi có thể tăng chiều dài hoặc thu nhỏ chiều dài. Một đối tượng chuỗi được khởi tạo (xây dựng) từ một lớp chuỗi. Đối tượng chuỗi là một cấu trúc dữ liệu với các hàm thành viên. Các hàm thành viên có thể được phân loại theo tiêu đề xây dựng đối tượng, truy cập phần tử, dung lượng chuỗi, các hàm thành viên chuỗi với các đối số của trình lặp và kiểu trả về, và các công cụ sửa đổi chuỗi. Bình đẳng chuỗi và toán tử quan hệ cũng tồn tại.