Chào các bạn học tập viên đã theo dõi và quan sát khóa huấn luyện lập trinc trực tuyến đường ngữ điệu C++.

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

Trong đều bài học trước, tôi đã lý giải chúng ta thực hiện một số thao tác đơn giản cùng với C-style string, giỏi có cách gọi khác là mảng kí trường đoản cú.

Để thao tác làm việc với mảng kí tự, bọn họ yêu cầu include thư viện cstring vào chương trình và để được hỗ trợ một số hàm sẵn có. Dù thế, việc xử trí mảng kí từ bỏ vẫn còn nhiều trở ngại. Một ví dụ điển hình nổi bật là việc bạn triển khai nối chuỗi kí trường đoản cú bằng hàm strcat. Quý khách hàng luôn luôn phải kê trọng tâm đến sự việc con số ô ghi nhớ nhưng bạn đã cấp phát đến mảng kí từ bỏ gồm đầy đủ để cất thêm chuỗi kí tự được nối vào ko. Hoặc là khi chúng ta khai báo một mảng kí từ bỏ, chúng ta cũng buộc phải đề ra câu hỏi: Liệu bao nhiêu ô hãy nhớ là đủ? Và các bạn bắt buộc luôn luôn đặt kí tự "" trên địa chỉ ngừng chuỗi kí tự... Quá các thiết bị khiến chúng ta phải để trọng tâm.

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

Các bạn cũng có thể làm được gì với tlỗi viện string cơ mà ngôn ngữ C++ cung cấp? Trước hết, chúng ta hãy cùng xem tlỗi viện string là gì, và nó đựng đa số gì bên phía trong.

londonrocknroll.com-Style string

Mình tạm Điện thoại tư vấn là londonrocknroll.com-style string để tiện khác nhau với C-style string nhưng mà chúng ta đang học tập vào một số bài học trước.

string là một trong những lớp chuẩn miêu tả về về chuỗi kí từ, nó cung ứng kĩ năng lưu trữ chuỗi kí tự gọi là standard container, cùng cung cấp kia một số trong những chi tiết được thiết kế với để cách xử trí chuỗi kí từ bỏ mà nó vẫn lưu trữ.

*

Một điểm mạnh nhưng lớp string mang về đến bọn họ là standard container có thể trường đoản cú chuyển đổi kích cỡ vùng lưu giữ mang lại phù hợp cùng với yên cầu về phương diện tàng trữ chuỗi kí tự. Do đó, những bạn cũng có thể tùy ý nối hoặc cyếu thêm dữ liệu vào standard container cho tới khi dung tích bộ lưu trữ cảm thấy không được nhằm hỗ trợ nữa.

Knhì báo cùng khởi tạo

Tương từ bỏ như bí quyết bọn họ khai báo đổi thay thường thì, dạng hình dữ liệu sẽ tiến hành sử dụng vào bài học này là string (Các bạn phải include thư viện string vào trước lúc sử dụng).

#include using namespace std;//.........string my_string;Lớp string cũng rất được đặt vào namespace std đề nghị chiếc lệnh using namespace std là quan trọng.

Vậy là chúng ta vẫn knhị báo được một đối tượng người dùng có tên là my_string trường đoản cú lớp string. Các bạn có thể khởi tạo thành chuỗi kí từ đến đối tượng người sử dụng tại thời gian khai báo bằng một số bí quyết nlỗi 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 có thể khởi tạo nên bằng phương pháp gán đến đối tượng người dùng một chuỗi kí trường đoản cú trải qua toán thù tử gán "=" hoặc lấy chuỗi kí tự xuất phát từ 1 đối tượng của lớp string không giống, với còn rất nhiều cách thức nữa.

string input đầu vào & output

Output:

Để chuyển dữ liệu bên trong standard container của string ra màn hình hiển thị console, chúng ta sử đụng đối tượng người tiêu dùng cout nlỗi cách bọn họ vẫn hay được dùng, chỉ cần thực hiện thương hiệu biến của đối tượ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 người dùng cin nhằm nhập tài liệu vào từ bàn phím cho đông đảo đối tượng người tiêu dùng của lớp string.

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

*

Trong một số trong những ngôi trường đúng theo, bọn họ chỉ trải nghiệm người dùng nhập 1 từ bỏ thì hoàn toàn có thể sử dụng đối tượng cin nlỗi phương pháp trên, ví dụ:

string command;docout << "Enter "new" to 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 depend on the command while (true);Nhưng trong một số trường thích hợp, chúng ta đề nghị string dấn vào kí tự khoảng White, ví dụ lúc nhập họ thương hiệu không thiếu thốn, thì bọn họ cần có một biện pháp không giống.

Để khắc phục trường hòa hợp string không sở hữu và nhận kí từ khoảng chừng trắng, chúng ta thực hiện hàm getline được tư tưởng phía bên 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ấn tài liệu tự bàn phím, Khi đề nghị nhận dữ liệu từ tệp tin thì bản thân đã truyền vào đối số thứ nhất một đối tượng người dùng bao gồm hình trạng tệp tin stream (phần này các các bạn sẽ được học sau).

Bây tiếng thì chúng ta có thể nhập tài liệu mà lại không bị số lượng giới hạn bởi kí từ bỏ khoảng chừng Trắng nữa.

*

Hàm getline mang định coi kí từ bỏ " " được tạo nên Khi nhấn phím Enter là kí từ xong xuôi nhập dữ liệu mang lại string. Chúng ta hoàn toàn có thể biến đổi điều đó.

Hàm getline có thể dìm thêm đối số vật dụng 3 thay mặt mang lại kí tự chấm dứt nhập tài liệu mang đến string. Ví dụ:

string str;cout << "Enter a string (kết thúc by a dot): " << endl;getline(cin, str, ".");cout << str << endl;Đoạn lịch trình bên trên khiến cho lịch trình tạm dừng cùng ngóng cho đến Lúc quy trình nhập dữ liệu của khách hàng xong, nó chỉ xong xuôi Lúc phân phát hiện vết chnóng.

*

String manipulating

Mình vừa lí giải chúng ta cách knhị báo nhưng mà thực hiện đẳng cấp dữ liệu string của ngữ điệu C++, tiếp theo sau là phần làm việc với standard container của một đối tượng string.

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

Lớp string có mang cho chúng ta 2 thủ tục để thực hiện vấn đề mang ra độ dài 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 thủ tục length cùng size của lớp string phần đa được dùng để tính độ nhiều năm của chuỗi kí từ bỏ vào standard container.

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

string empty_string = "";if(empty_string.empty())cout << "string is empty" << endl;Chúng ta cũng có thể làm cho một string gồm cất tài liệu thay đổi string rỗng bằng thủ tục clear.

string str = "This is a sample string".str.clear();if(str.empty())cout << "str is now empty" << endl;Truy cập bộ phận vào stringCũng giống như nlỗi vấn đề truy cập thành phần trong mảng kí tự, chúng ta thực hiện cặp vệt ngoặc vuông với truyền vào một trong những giá trị số ngulặng thay mặt đại diện mang đến chỉ số của bộ phận đề nghị tróc 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) << " ";Phương thức at của lớp string cũng triển khai tầm nã xuất đến phần tử tất cả chỉ số index tựa như cặp lốt ngoặc vuông.

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

2 phương pháp truy vấn thành phần trên được dùng để làm tróc nã xuất thành phần bao gồm chỉ số ko cố định. Lớp tring còn cung cấp mang đến họ 2 cách tiến hành nhằm truy xuất nkhô giòn đến thành phần trước tiên với phần tử sau cuối của chuỗi kí từ trong standard container.

Xem thêm: Bảo Ngậu Là Ai Bảo Ngậu Phim “Người Phán Xử”, Bảo Ngậu Người Phán Xử

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

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

Có tương đối nhiều phương thức được lớp string khái niệm dùng để làm đổi khác dữ liệu trong standard container.

Nối thêm một kí từ bỏ vào sau string:

Chúng ta chỉ cần truyền vào phương thức push_back kí trường đoản cú mà lại họ mong cung ứng sau chuỗi kí từ bỏ vào standard container.

string str = "A sentence must end with a dot";str.push_back(".");Xóa phần tử sau cuối của string:

Ngược lại với cách tiến hành push_baông chồng sinh hoạt trên, phương thức pop_baông xã xóa đi kí từ bỏ cuối cùng vào string. Nếu các bạn triển khai cách tiến hành này lúc string rỗng, chương trình vẫn gây nên lỗi xung bỗng dưng vùng ghi nhớ, chính vì như thế, chúng ta yêu cầu kiểm tra 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 rất có thể thực hiện cách làm append của lớp string nhằm nối thêm một chuỗi kí từ bỏ vào sau cùng chuỗi kí từ vào standard container.

string& appkết thúc (const string& str);

string& appkết thúc (const char* s);

Các bạn có thể truyền vào cách làm append một đối tượng người dùng gồm hình trạng string hoặc thương hiệu của một mảng kí trường đoản cú làm sao đó.

string str = "";str.append("Le");str.append(" ");str.append("Tran");str.append(" Dat");Trong khi, lớp string đã và đang định nghĩa lại toán thù tử nối chuỗi kí trường đoản cú góp bọn họ tiết kiệm thời gian viết code hơn.

string str = "";str += "Use "+=" operator ";str += "khổng lồ appkết thúc string";Toán thù tử "+=" tất cả tác dụng hoàn toàn kiểu như với cách tiến hành append.

Ckém một string vào vị trí bất kể trong string:

Phương thơm thức insert có thể góp chúng ta cyếu một string vào địa điểm pos.

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

Ví dụ:

string str = "how lớn 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 áp dụng cách tiến hành insert trước tiên, mình cnhát str2 vào str tại địa chỉ trước tiên. Sau kia, mình ckém thêm 1 chuỗi kí từ bỏ trên vị trí str.length() - 1 (trước lốt chấm kết thúc câu).

Sử dụng cách thức insert cùng với vị trí chèn chưa hợp lệ sẽ gây nên lỗi xung thốt nhiên vùng lưu giữ.

Ttốt nỗ lực một trong những phần của string:

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

string& replace (size_t pos, size_t len, const string& str);string& replace (size_t pos, size_t len, const char* s);Ở trên đấy là 2 cách mà họ hay được sử dụng. Trong đó, pos là địa điểm trong standard container cơ mà bạn muốn triển khai thay thế sửa chữa, len là con số kí từ bỏ trong standard container cơ mà bạn muốn vắt, str là đoạn kí từ bỏ mới được ghxay 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 tác dụng đoạn công tác trên và tưởng tượng coi demo điều gì vừa diễn ra.

*

Tại vị trí pos của string cội, chương trình xóa đi len kí từ bỏ, cùng cyếu str vào string gốc trên ví trí pos. Đó là phương pháp mà lại cách thức replace hoạt động.

Tìm kiếm

Có nhiều cách tiến hành trong lớp string được tư tưởng cho những ngôi trường hợp search tìm phức hợp. Mình chỉ hướng dẫn chúng ta sử dụng thủ tục find của lớp string để search tìm vị trí lộ diện của chuỗi bé phía bên trong đối tượng người dùng nhưng bạn đang dùng để gọi cách thức find.

ví dụ như bản thân có string dùng để làm giữ một số trong những thương hiệu của những member vào đội thực hiện tutorial này:

string name_danh mục = "Le Tran Dat Nguyen Chiem Minh Vu Ngo Doan Tuan Le Dinh Huy";Thử in name_menu ra màn hình:

*

Yêu cầu nhập lệ một chiếc tên từ bỏ keyboard với khẳng định xem tên đó có trường thọ trong danh sách trên hay không.

Sau đấy là một số trong những knhị báo cách thức find trong lớp string để giúp đỡ chúng ta giải quyết và xử lý vấn đề tôi vừa đề ra.

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

Tìm kiếm sự lộ diện của chuỗi nhỏ str bên phía trong standard container của đối tượng người dùng cơ mà các bạn dùng để làm Gọi cách làm find, vị trí bước đầu tra cứu kiếm mặc định là 0.

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

if(search_index == -1)cout << name << " is not exist in name_list" << endl;elsecout << "Found at: " << search_index << endl;Pmùi hương thức find này dễ thực hiện hơn so với bài toán sử dụng hàm strstr trong thỏng viện cstring nhằm tìm tìm trong mảng kí từ bỏ.

So sánh 2 string

Phép đối chiếu 2 string cũng khá được triển khai theo lắp thêm trường đoản cú trường đoản cú điển (trường đoản cú trái quý phái phải) hệt như lúc đố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 quý hiếm số ngulặng. Tương từ bỏ nhỏng đối chiếu 2 mảng kí tự bằng hàm strcmp, quý hiếm trả về đang là 1 trong trong 3 ngôi trường hợp:

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

Điều này có nghĩa văn bản của nhị chuỗi kí từ bỏ này hoàn toàn giống nhau. Ví dụ:

string str1 = "This is a string";string str2 = "This is a string";if(str1.compare(str2) == 0)cout << "str1 & str2 are equal" << endl;elsecout << "str1 ans str2 are not equal" << endl;Giá trị trả về bé dại hơn 0:

Điều này có nghĩa tại địa chỉ phân phát hiện nay cặp kí tự ko cân đối giữa str1 cùng str2 tạm bợ Gọi là địa điểm index_not_match, ta có:

str1 < str

Ví dụ:

string str1 = "abcDEF";string str2 = "abcdef";khi đối chiếu string str1 với string str2 như trên bởi cái lệnh str1.compare(str2), ta nhấn được giá trị trả về nhỏ dại hơn 0, vì chưng trên địa chỉ tất cả chỉ số là 3, kí từ bỏ "D" của str1 gồm mã ASCII nhỏ tuổi rộng kí từ bỏ "d" của str2.

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

Ngược lại với câu hỏi giá trị trả về nhỏ tuổi rộng 0. Mình lấy lại ví dụ trên:

string str1 = "abcDEF";string str2 = "abcdef";Nếu chúng ta tiến hành so sánh nlỗi sau:

str2.compare(str1);Giá trị trả về sẽ lớn hơn 0.

Một phương pháp áp dụng khác của phương thức 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ý giá 7, thay mặt đại diện mang đến địa chỉ bắt đầu so sánh. Tại địa chỉ bao gồm chỉ số 7, bản thân kéo ra 10 kí tự liên tục nhau nhằm theo thứ tự so sánh với chuỗi "comparison" được mình truyền vào sinh sống đối số thiết bị 3 trong cách làm compare.

*

Chương thơm trình vạc hiện nay 2 chuỗi kí tự bé này như là nhau, phải cực hiếm trả về là 0.

Tổng kết

Kiểu dữ liệu string vào C++ hổ trợ cho bọn họ rất đôi khi thao tác làm việc cùng với chuỗi kí từ. Vì nỗ lực, bản thân ưu tiên londonrocknroll.com-style string rộng bài toán sử dụng C-style string.

Hẹn chạm mặt lại chúng ta vào bài học tiếp theo vào khóa đào tạo lập trình sẵn C++ phía thực hành.

Mọi chủ ý đóng góp hoặc vướng mắc có thể đặt câu hỏi thẳng tại diễn đàn.

www.londonrocknroll.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

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *