String là gì

Chào chúng ta học viên vẫn theo dõi khóa huấn luyện và đào tạo lập trinh trực tuyến đường ngữ điệu C++.

Bạn đang xem: String là gì

Trong hồ hết bài học trước, mình đã giải đáp chúng ta triển khai một vài thao tác dễ dàng và đơn giản với C-style string, giỏi còn được gọi là mảng kí tự.

Để làm việc với mảng kí từ bỏ, bọn họ đề nghị include tlỗi viện cstring vào chương trình sẽ được cung ứng một trong những hàm sẵn có. Tuy nhưng, việc xử trí mảng kí trường đoản cú vẫn còn đó nhiều khó khăn. Một ví dụ điển hình nổi bật là Việc bạn tiến hành nối chuỗi kí tự bằng hàm strcat. quý khách hàng luôn luôn phải đặt vai trung phong đến sự việc số lượng ô nhớ cơ mà bạn sẽ cấp phát đến mảng kí trường đoản cú có đủ để cất thêm chuỗi kí trường đoản cú được nối vào ko. hay là khi bạn knhị báo một mảng kí từ bỏ, chúng ta cũng nên đề ra câu hỏi: Liệu bao nhiêu ô nhớ rằng đủ? Và bạn nên luôn đặt kí trường đoản cú "" tại địa điểm kết thúc chuỗi kí từ bỏ... Quá những thứ khiến các bạn phải kê trung tâm.

Trong bài học lúc này, mình đang reviews cùng với các bạn về hình dạng dữ liệu string được khái niệm trong thỏng viện string của ngôn ngữ C++ (chúng ta chớ nhầm lẫn thân tlỗi viện cstring của ngôn từ C với thỏng viện string của ngôn ngữ C++, hai thư viện này hoàn toàn riêng biệt biệt).

Các chúng ta có thể làm được gì cùng với thư viện string nhưng mà ngữ điệu C++ cung cấp? Trước không còn, chúng ta hãy cùng xem tlỗi viện string là gì, với nó chứa hầu như gì phía bên trong.

michael-shanks.com-Style string

Mình tạm thời hotline là michael-shanks.com-style string để luôn thể tách biệt với C-style string cơ mà chúng ta sẽ học tập trong một vài bài học trước.

string là một trong những lớp chuẩn biểu đạt về về chuỗi kí trường đoản cú, nó cung ứng tài năng lưu trữ chuỗi kí tự hotline là standard container, với cấp dưỡng kia một số chi tiết có thiết kế nhằm xử trí chuỗi kí từ bỏ mà lại nó đã tàng trữ.

*

Một ưu thế mà lớp string mang lại cho họ là standard container hoàn toàn có thể tự chuyển đổi kích thước vùng ghi nhớ mang đến cân xứng cùng với yên cầu về khía cạnh lưu trữ chuỗi kí tự. Do đó, các bạn có thể tùy ý nối hoặc cnhát thêm tài liệu vào standard container cho đến Lúc dung lượng bộ nhớ không đủ nhằm cung cấp nữa.

Khai báo cùng khởi tạo

Tương từ bỏ như bí quyết bọn họ knhì báo biến chuyển thường thì, loại dữ liệu sẽ được cần sử dụng trong bài học này là string (Các bạn phải include thư viện string vào trước khi sử dụng).

#include using namespace std;//.........string my_string;Lớp string cũng được đặt trong namespace std nên loại lệnh using namespace std là cần thiết.

Vậy là bọn họ đang knhì báo được một đối tượng có tên là my_string từ lớp string. Các bạn cũng có thể khởi chế tạo ra chuỗi kí từ đến đối tượng người tiêu dùng tại thời gian knhì báo bằng một vài phương pháp nhỏng sau:

string empty_string();string my_string = "Learning C++ is easy";string another_string("Don"t give it up");string temp_string("What the hell is going on?");string one_more = temp_string;string it_just_began(temp_string);Chúng ta rất có thể khởi chế tác bằng phương pháp gán mang đến đối tượng người tiêu dùng một chuỗi kí từ bỏ thông qua tân oán tử gán "=" hoặc đem chuỗi kí từ từ một đối tượng người dùng của lớp string không giống, với còn nhiều cách nữa.

string input & output

Output:

Để gửi tài liệu bên trong standard container của string ra screen console, chúng ta sử va đối tượng người sử dụng cout nlỗi phương pháp bọn họ vẫn hay được sử dụng, chỉ việc áp dụng tên phát triển thành của đối tượng người dùng string.

string output_string = "I"m learning C++ programming language";cout << output_string << endl;Input:

Chúng ta rất có thể sử dụng đối tượng cin để nhập dữ liệu vào trường đoản cú keyboard cho những đối tượng người sử dụng của lớp string.

string input_string;cout << "Please enter your command: ";cin >> input_string;Với biện pháp nhập dữ liệu này, họ lại gặp đề nghị ngôi trường hợp dữ liệu truyền vào string bị ngừng khi chạm mặt kí từ bỏ khoảng chừng white.

*

Trong một số trong những trường hợp, chúng ta chỉ đề xuất người tiêu dùng nhập 1 từ bỏ thì rất có thể sử dụng đối tượng người dùng cin như phương pháp bên trên, ví dụ:

string command;docout << "Enter "new" khổng lồ create a new tệp tin." << endl;cout << "Enter "cancel" to lớn disthẻ the previous behavior." << endl;cout << "Enter "quit" lớn exit the program." << endl;cout << "=============================================" << endl;cout << "Enter your command: ";cin >> command;cout << "=============================================" << endl;//vì something depkết thúc on the command while (true);Nhưng trong một số trong những ngôi trường thích hợp, bọn họ cần string thừa nhận vào kí từ bỏ khoảng tầm Trắng, ví dụ Khi nhập bọn họ thương hiệu không thiếu, thì họ cần có một cách không giống.

Để khắc phục và hạn chế trường hòa hợp string không sở hữu và nhận kí từ bỏ khoảng chừng white, bọn họ sử dụng hàm getline được tư tưởng bên phía trong thỏng viện string.

string name;cout << "Enter your full name: ";getline( cin, name );Mình truyền vào getline đối tượng người tiêu dùng cin nhằm dấn dữ liệu từ bỏ bàn phím, Khi yêu cầu dìm tài liệu tự file thì bản thân đang truyền vào đối số đầu tiên một đối tượng người sử dụng gồm giao diện file stream (phần này những các bạn sẽ được học sau).

Bây tiếng thì bạn cũng có thể nhập tài liệu mà lại không bị giới hạn vị kí trường đoản cú khoảng trắng nữa.

*

Hàm getline khoác định xem kí tự " " được tạo nên Khi thừa nhận phím Enter là kí từ ngừng nhập tài liệu cho string. Chúng ta có thể chuyển đổi vấn đề này.

Hàm getline rất có thể thừa nhận thêm đối số thứ 3 đại diện cho kí trường đoản cú ngừng nhập dữ liệu mang lại string. Ví dụ:

string str;cout << "Enter a string (end by a dot): " << endl;getline(cin, str, ".");cout << str << endl;Đoạn chương trình trên khiến lịch trình dừng lại và đợi cho tới Lúc quá trình nhập tài liệu của người tiêu dùng dứt, nó chỉ xong Khi vạc hiện tại vết chấm.

*

String manipulating

Mình vừa lí giải các bạn giải pháp khai báo mà thực hiện kiểu dữ liệu string của ngôn ngữ C++, tiếp theo sau là phần thao tác làm việc cùng với standard container của một đối tượng người tiêu dùng string.

Tính độ nhiều năm chuỗi kí tự được lưu vào standard container

Lớp string định nghĩa mang lại họ 2 cách thức để thực hiện Việc mang ra độ lâu năm của chuỗi kí từ được lưu giữ vào standard container.

string my_favorite_quote = "By my will, this shall be finished";cout << "Length of the quote: " << my_favorite_quote.length() << endl;cout << "Length of the quote: " << my_favorite_quote.size() << endl;Hai cách làm length với size của lớp string hầu hết được dùng để làm tính độ dài của chuỗi kí từ vào standard container.

khi string tất cả độ nhiều năm chuỗi kí từ bỏ là 0, nó được coi là string trống rỗng. Để kiểm soát coi string tất cả rỗng hay là không, bọn họ thực hiện cách tiến hành empty, thủ tục này trả về quý giá true lúc string rỗng, ngược trở lại, trả về cực hiếm false.

string empty_string = "";if(empty_string.empty())cout << "string is empty" << endl;Chúng ta cũng hoàn toàn có thể có tác dụng một string tất cả cất dữ liệu đổi mới string trống rỗng bởi cách tiến hành clear.

string str = "This is a sample string".str.clear();if(str.empty())cout << "str is now empty" << endl;Truy cập phần tử trong stringCũng tựa như nlỗi vấn đề truy vấn bộ phận trong mảng kí từ bỏ, chúng ta sử dụng cặp dấu ngoặc vuông và truyền vào một trong những cực hiếm số nguim đại diện cho chỉ số của bộ phận đề xuất truy nã xuất.

string str = "Learn from others people";for(int32_t index = 0; index <= str.length() - 1; index++)cout << str << " ";cout << endl;for(int32_t index = 0; index <= str.length() - 1; index++)cout << str.at(index) << " ";Pmùi hương thức at của lớp string cũng thực hiện truy hỏi xuất mang lại bộ phận có chỉ số index tương tự như cặp dấu ngoặc vuông.

Nếu lịch trình phạt hiện hành động truy nã xuất đến phần tử có chỉ số không hợp lệ (index < 0 hoặc index >= string length), Assertion vẫn ép buộc chương trình hoàn thành và thông báo cái lệnh gây nên lỗi cho chính mình.

2 bí quyết truy cập thành phần bên trên được dùng để tróc nã xuất bộ phận có chỉ số ko cố định và thắt chặt. Lớp tring còn cung cấp cho họ 2 phương thức để tầm nã xuất nhanh khô mang lại bộ phận đầu tiên cùng phần tử sau cuối của chuỗi kí trường đoản cú vào standard container.

Xem thêm: Hướng Dẫn Cách Chế Biến Cá Cam, Cách Làm Cá Cam Kho Cà Ngon Không Bị Tanh

string sample = "Access lớn the first và the last element";cout << "First: " << sample.front() << endl;cout << "Last: " << sample.back() << endl;Assertion đặt trong 2 cách thức front với back sẽ tiến hành kích hoạt ví như string trống rỗng.

Txuất xắc thay đổi tài liệu vào string

Có khá nhiều cách tiến hành được lớp string khái niệm dùng làm thay đổi dữ liệu vào standard container.

Nối thêm 1 kí từ vào sau cùng string:

Chúng ta chỉ cần truyền vào cách thức push_back kí trường đoản cú nhưng họ muốn cung ứng sau chuỗi kí từ bỏ trong standard container.

string str = "A sentence must over with a dot";str.push_back(".");Xóa bộ phận cuối cùng của string:

trái lại cùng với cách thức push_back ở trên, cách tiến hành pop_baông xã xóa đi kí từ bỏ sau cùng trong string. Nếu các bạn triển khai thủ tục này Lúc string trống rỗng, công tác đang gây ra lỗi xung đột nhiên vùng lưu giữ, chính vì thế, các bạn đề xuất khám nghiệm trước khi xóa.

string str = "The dot will be removed.";if(!str.empty())str.pop_back();Nối chuỗi kí tự vào sau string:

Chúng ta có thể áp dụng phương thức append của lớp string để nối thêm một chuỗi kí từ bỏ vào sau cùng chuỗi kí trường đoản cú trong standard container.

string& appover (const string& str);

string& appover (const char* s);

Các chúng ta có thể truyền vào cách tiến hành append một đối tượng người sử dụng bao gồm loại string hoặc thương hiệu của một mảng kí từ như thế nào đó.

string str = "";str.append("Le");str.append(" ");str.append("Tran");str.append(" Dat");Hình như, lớp string cũng đã tư tưởng lại toán thù tử nối chuỗi kí từ bỏ giúp bọn họ tiết kiệm ngân sách thời gian viết code hơn.

string str = "";str += "Use "+=" operator ";str += "lớn appkết thúc string";Toán tử "+=" có chức năng trọn vẹn tương đương với cách tiến hành append.

Chèn một string vào địa chỉ bất cứ vào string:

Phương thơm thức insert hoàn toàn có thể giúp bọn họ cyếu một string vào địa chỉ pos.

string& insert (size_t pos, const string& str);

Ví dụ:

string str = "how to use.";string str2 = "i will introduce you ";cout << str << endl;str.insert(0, str2);cout << str << endl;str.insert(str.length() - 1, " string in C++");cout << str << endl;Trong lần thực hiện cách làm insert đầu tiên, bản thân chèn str2 vào str trên vị trí thứ nhất. Sau kia, mình cnhát thêm 1 chuỗi kí từ tại địa chỉ str.length() - 1 (trước vệt chấm ngừng câu).

Sử dụng thủ tục insert với địa điểm cyếu không hợp lệ sẽ tạo ra lỗi xung bỗng dưng vùng ghi nhớ.

Thay ráng một trong những phần của string:

Chắc những bạn cũng có thể đoán được tên của thủ tục mà lại bản thân chuẩn bị nói tới. Phương thức replace dùng làm thay thế một quãng con của chuỗi kí tự giữ vào standard container bởi 1 string hoặc 1 mảng kí từ bỏ khác.

string& replace (size_t pos, size_t len, const string& str);string& replace (size_t pos, size_t len, const char* s);Tại trên đấy là 2 cách cơ mà họ hay được dùng. Trong số đó, pos là địa chỉ vào standard container mà bạn muốn thực hiện thay thế, len là số lượng kí từ bỏ trong standard container nhưng bạn muốn chũm, str là đoạn kí tự mới được ghép vào trong standard container.

Ví dụ:

string my_string = "This string will be replaced";cout << my_string << endl;my_string.replace(20, 8, "changed");cout << my_string << endl;Nhìn vào hiệu quả đoạn lịch trình trên và hình dung xem thử điều gì vừa diễn ra.

*

Tại vị trí pos của string nơi bắt đầu, công tác xóa đi len kí tự, và ckém str vào string nơi bắt đầu tại ví trí pos. Đó là phương pháp mà cách thức replace chuyển động.

Tìm kiếm

Có nhiều phương thức trong lớp string được khái niệm cho các trường hòa hợp tìm kiếm kiếm phức tạp. Mình chỉ lý giải chúng ta áp dụng cách tiến hành find của lớp string nhằm tìm tìm địa chỉ xuất hiện của chuỗi bé bên phía trong đối tượng người tiêu dùng cơ mà nhiều người đang dùng làm Call thủ tục find.

lấy ví dụ bản thân bao gồm string dùng làm lưu giữ một trong những tên của những member vào đội thực hiện tutorial này:

string name_menu = "Le Tran Dat Nguyen Chiem Minch Vu Ngo Doan Tuan Le Dinch Huy";Thử in name_menu ra màn hình:

*

Yêu cầu nhập vào một cái thương hiệu tự keyboard và xác minh xem tên kia tất cả trường tồn trong list bên trên hay không.

Sau đây là một trong những khai báo cách thức find trong lớp string để giúp các bạn xử lý vụ việc mình vừa đặt ra.

size_t find (const string& str, size_t pos = 0) const;

Tìm kiếm sự xuất hiện thêm của chuỗi nhỏ str phía bên trong standard container của đối tượng nhưng chúng ta dùng để làm gọi phương thức find, địa chỉ bắt đầu tìm kiếm mang định là 0.

string name;cout << "Enter a name: ";getline(cin, name);int32_t search_index = name_danh sách.find(name);Nếu name được tìm kiếm thấy phía bên trong name_các mục, trở nên search_index đang dìm được giá trị là chỉ sổ mà lại name được kiếm tìm thấy. Nếu không được tìm kiếm thấy, thay đổi search_index dìm quý hiếm -1.

if(search_index == -1)cout << name << " is not exist in name_list" << endl;elsecout << "Found at: " << search_index << endl;Phương thức find này dễ dàng sử dụng rộng đối với Việc áp dụng hàm strstr trong thỏng viện cstring nhằm search tìm vào mảng kí trường đoản cú.

So sánh 2 string

Phnghiền so sánh 2 string cũng rất được triển khai theo trang bị từ từ điển (trường đoản cú trái lịch sự phải) y như Khi đối chiếu nhì mảng kí tự.

int compare (const string& str) const;

Hoặc

int compare (const char* s) const;

Phương thơm thức đối chiếu compare trả về một cực hiếm số nguyên. Tương tự nhỏng đối chiếu 2 mảng kí trường đoản cú bởi hàm strcmp, cực hiếm trả về vẫn là một vào 3 trường hợp:

Giá trị trả về là 0:

Điều này có nghĩa văn bản của hai chuỗi kí tự này hoàn toàn như là nhau. Ví dụ:

string str1 = "This is a string";string str2 = "This is a string";if(str1.compare(str2) == 0)cout << "str1 and str2 are equal" << endl;elsecout << "str1 ans str2 are not equal" << endl;Giá trị trả về nhỏ tuổi hơn 0:

Điều này còn có nghĩa trên vị trí phạt hiện tại cặp kí trường đoản cú ko hài hòa thân str1 và str2 tạm bợ điện thoại tư vấn là địa điểm index_not_match, ta có:

str1 < str

Ví dụ:

string str1 = "abcDEF";string str2 = "abcdef";khi so sánh string str1 với string str2 nlỗi trên bởi dòng lệnh str1.compare(str2), ta dìm được giá trị trả về nhỏ hơn 0, bởi vì trên địa chỉ tất cả chỉ số là 3, kí trường đoản cú "D" của str1 bao gồm mã ASCII nhỏ dại hơn kí trường đoản cú "d" của str2.

Giá trị trả về lớn hơn 0:

trái lại với câu hỏi cực hiếm trả về nhỏ dại rộng 0. Mình đem lại ví dụ trên:

string str1 = "abcDEF";string str2 = "abcdef";Nếu chúng ta thực hiện đối chiếu như sau:

str2.compare(str1);Giá trị trả về vẫn to hơn 0.

Một phương pháp sử dụng không giống của cách làm compare:

int compare (size_t pos, size_t len, const string& str) const;

Ví dụ:

string my_string = "Make a comparison";int comparison = my_string.compare(7, 10, "comparison");cout << "Result of the comparison: " << comparison << endl;Đối số pos được bản thân gán quý hiếm 7, đại diện thay mặt đến địa điểm bước đầu đối chiếu. Tại địa điểm tất cả chỉ số 7, bản thân lấy ra 10 kí tự thường xuyên nhau nhằm theo lần lượt đối chiếu với chuỗi "comparison" được bản thân truyền vào ở đối số trang bị 3 vào cách thức compare.

*

Chương thơm trình phân phát hiện tại 2 chuỗi kí từ nhỏ này như thể nhau, buộc phải cực hiếm trả về là 0.

Tổng kết

Kiểu tài liệu string trong C++ hổ trợ mang đến chúng ta rất thỉnh thoảng thao tác cùng với chuỗi kí từ bỏ. Vì nỗ lực, bản thân ưu tiên michael-shanks.com-style string rộng vấn đề áp dụng C-style string.

Hẹn chạm chán lại các bạn trong bài học tiếp sau vào khóa huấn luyện và đào tạo lập trình C++ hướng thực hành thực tế.

Xem thêm: Giới Thiệu Cách Nướng Bánh Bằng Lò Nướng Tại Nhà, Cách Sử Dụng Lò Nướng Để Nướng Bánh

Mọi chủ ý góp phần hoặc vướng mắc rất có thể đặt thắc mắc trực tiếp trên diễn lũ.

www.michael-shanks.com.com

Link Videos khóa học

https://www.udemy.com/c-co-ban-danh-cho-nguoi-moi-hoc-lap-trinh/learn/v4/overview


Chuyên mục: ĐỊNH NGHĨA