STRING LÀ GÌ

Chào chúng ta học viên đã theo dõi và quan sát khóa huấn luyện lập trinh trực tuyến ngôn từ C++.

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

Trong hầu như bài học trước, tôi đã giải đáp chúng ta tiến hành một vài thao tác làm việc đơn giản và dễ dàng với C-style string, xuất xắc còn gọi là mảng kí trường đoản cú.

Để thao tác cùng với mảng kí từ, chúng ta đề xuất include thư viện cstring vào chương trình để được hỗ trợ một vài hàm sẵn bao gồm. Tuy vậy, việc cách xử lý mảng kí tự vẫn còn đấy những khó khăn. Một ví dụ điển hình là vấn đề bạn thực hiện nối chuỗi kí trường đoản cú bởi hàm strcat. Quý Khách luôn luôn phải đặt chổ chính giữa đến sự việc con số ô lưu giữ nhưng mà các bạn đang cấp phép mang lại mảng kí trường đoản cú gồm đủ để đựng thêm chuỗi kí từ được nối vào không. Hay là khi chúng ta knhị báo một mảng kí tự, chúng ta cũng cần đề ra câu hỏi: Liệu bao nhiêu ô hãy nhờ rằng đủ? Và chúng ta nên luôn luôn đặt kí trường đoản cú "" tại vị trí kết thúc chuỗi kí từ bỏ... Quá nhiều đồ vật khiến cho chúng ta phải kê trung tâm.

Trong bài học kinh nghiệm bây giờ, mình đang trình làng cùng với các bạn về vẻ bên ngoài dữ liệu string được định nghĩa vào tlỗi viện string của ngữ điệu C++ (các bạn chớ lầm lẫn thân thỏng viện cstring của ngôn từ C với thư viện string của ngôn ngữ C++, hai thỏng viện này trọn vẹn riêng rẽ biệt).

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

mni-alive.com-Style string

Mình tạm thời điện thoại tư vấn là mni-alive.com-style string để nhân tiện rõ ràng với C-style string cơ mà các bạn vẫn học trong một số trong những bài học trước.

string là 1 lớp chuẩn diễn tả về về chuỗi kí trường đoản cú, nó cung ứng kỹ năng tàng trữ chuỗi kí trường đoản cú call là standard container, cùng cung ứng kia một vài cụ thể được thiết kế nhằm cách xử lý chuỗi kí từ cơ mà nó đã tàng trữ.

*

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

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

Tương trường đoản cú như bí quyết họ knhì báo đổi mới thường thì, vẻ bên ngoài tài liệu sẽ được sử dụng trong bài học này là string (Các bạn cần 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 khá được đặt trong namespace std buộc phải loại lệnh using namespace std là quan trọng.

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

string input & output

Output:

Để gửi tài liệu bên trong standard container của string ra màn hình console, chúng ta sử chạm đối tượng người tiêu dùng cout nhỏng bí quyết họ vẫn hay được sử dụng, chỉ việc áp dụng tên biến hóa của đối tượng người sử dụng string.

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

Chúng ta rất có thể thực hiện đối tượng người tiêu dùng cin để nhập dữ liệu vào từ bỏ bàn phím đến gần như đối tượng của lớp string.

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

*

Trong một số ngôi trường thích hợp, bọn họ chỉ kinh nghiệm người tiêu dùng nhập 1 tự thì rất có thể áp dụng đối tượng người tiêu dùng cin nlỗi cách bên trên, ví dụ:

string command;docout << "Enter "new" to lớn create a new tệp tin." << endl;cout << "Enter "cancel" khổng lồ disthẻ the previous behavior." << endl;cout << "Enter "quit" lớn exit the program." << endl;cout << "=============================================" << endl;cout << "Enter your command: ";cin >> command;cout << "=============================================" << endl;//bởi vì something depover on the command while (true);Nhưng vào một vài trường phù hợp, họ yêu cầu string dấn vào kí trường đoản cú khoảng chừng trắng, ví dụ khi nhập họ tên vừa đủ, thì họ cần phải 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 tầm Trắng, chúng ta thực hiện hàm getline được khái niệm bên trong tlỗi viện string.

string name;cout << "Enter your full name: ";getline( cin, name );Mình truyền vào getline đối tượng cin để dấn dữ liệu từ keyboard, Khi bắt buộc dìm dữ liệu trường đoản cú file thì bản thân sẽ truyền vào đối số trước tiên một đối tượng tất cả thứ hạng tệp tin stream (phần này những bạn sẽ được học sau).

Bây tiếng thì chúng ta cũng có thể nhập tài liệu nhưng không xẩy ra số lượng giới hạn do kí tự khoảng chừng White nữa.

*

Hàm getline mang định coi kí tự " " được tạo ra Lúc thừa nhận phím Enter là kí từ bỏ chấm dứt nhập dữ liệu đến string. Chúng ta rất có thể thay đổi vấn đề này.

Hàm getline hoàn toàn có thể dấn thêm đối số trang bị 3 đại diện mang đến kí trường đoản cú hoàn thành nhập tài liệu đến string. Ví dụ:

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

*

String manipulating

Mình vừa hướng dẫn các bạn cách knhì báo cơ mà thực hiện hình dáng dữ liệu string của ngôn ngữ C++, tiếp theo là phần thao tác cùng với standard container của một đối tượng string.

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

Lớp string khái niệm mang đến bọn họ 2 thủ tục nhằm triển khai câu hỏi lấy ra độ nhiều năm của chuỗi kí từ được 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 phương thức lengthsize của lớp string phần đa được dùng để làm tính độ nhiều năm của chuỗi kí từ bỏ trong standard container.

khi string có độ nhiều năm chuỗi kí trường đoản cú là 0, nó được xem như là string trống rỗng. Để kiểm tra xem string có rỗng hay không, họ sử dụng cách làm empty, cách làm này trả về cực hiếm true Khi string rỗng, ngược 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ể làm cho một string tất cả cất tài liệu biến 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 thành phần vào stringCũng tương tự như nhỏng việc truy vấn bộ phận vào mảng kí từ, chúng ta sử dụng cặp dấu ngoặc vuông với truyền vào một trong những giá trị số nguyên ổn thay mặt đại diện cho chỉ số của thành phần nên 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) << " ";Phương thơm thức at của lớp string cũng thực hiện truy nã xuất cho bộ phận gồm chỉ số index tương tự cặp dấu ngoặc vuông.

Nếu lịch trình phát hiện tại hành động truy nã xuất đến thành phần gồm chỉ số chưa hợp lệ (index < 0 hoặc index >= string length), Assertion đã nghiền buộc chương trình dứt với thông báo chiếc lệnh tạo ra lỗi cho bạn.

2 bí quyết truy cập phần tử trên được dùng để làm tróc nã xuất phần tử gồm chỉ số ko cố định và thắt chặt. Lớp tring còn hỗ trợ mang lại chúng ta 2 thủ tục để truy hỏi xuất nkhô nóng đến bộ phận đầu tiên với bộ phận ở đầu cuối của chuỗi kí từ bỏ trong standard container.

Xem thêm: Mách Cách Chế Biến Hải Sản Ngon Như Nhà Hàng ~ Ẩm Thực Thông Thái

string sample = "Access to lớn the first and the last element";cout << "First: " << sample.front() << endl;cout << "Last: " << sample.back() << endl;Assertion đặt vào 2 cách làm frontback sẽ được kích hoạt trường hợp string rỗng.

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

Có không hề ít phương thức được lớp string khái niệm dùng làm biến đổi dữ liệu vào standard container.

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

Chúng ta chỉ việc truyền vào cách làm push_back kí tự nhưng bọn họ ý muốn phân phối sau chuỗi kí từ trong standard container.

string str = "A sentence must kết thúc with a dot";str.push_back(".");Xóa thành phần ở đầu cuối của string:

trái lại với thủ tục push_back nghỉ ngơi bên trên, cách tiến hành pop_baông chồng xóa đi kí từ ở đầu cuối trong string. Nếu các bạn triển khai thủ tục này lúc string trống rỗng, chương trình đang gây ra lỗi xung bỗng nhiên vùng nhớ, chính vì như vậy, chúng ta buộc phải 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 hoàn toàn có thể sử dụng cách tiến hành append của lớp string để nối thêm một chuỗi kí trường đoản cú vào sau cùng chuỗi kí từ trong standard container.

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

string& append (const char* s);

Các bạn có thể truyền vào cách thức append một đối tượng người dùng tất cả dạng hình string hoặc tên 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");Bên cạnh đó, lớp string đã và đang định nghĩa lại toán thù tử nối chuỗi kí từ góp họ tiết kiệm ngân sách và chi phí thời hạn viết code rộng.

string str = "";str += "Use "+=" operator ";str += "to appkết thúc string";Toán tử "+=" gồm tác dụng hoàn toàn như thể với phương thức append.

Chèn một string vào vị trí bất kì vào string:

Phương thơm thức insert có thể giúp bọn họ cyếu một string vào vị trí 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 thủ tục insert thứ nhất, mình cyếu str2 vào str trên địa chỉ đầu tiên. Sau kia, bản thân cnhát thêm một chuỗi kí tự tại vị trí str.length() - 1 (trước vệt chnóng hoàn thành câu).

Sử dụng cách thức insert với địa chỉ cyếu không phù hợp lệ đã gây nên lỗi xung hốt nhiên vùng lưu giữ.

Thay gắng một phần của string:

Chắc các chúng ta cũng có thể đoán thù được tên của thủ tục nhưng mà mình sẵn sàng nói về. Pmùi hương thức replace dùng để thay thế một quãng bé của chuỗi kí từ bỏ lưu giữ trong standard container bởi 1 string hoặc 1 mảng kí trường đoản cú 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);Tại trên đây là 2 phương pháp nhưng mà chúng ta hay được dùng. Trong đó, pos là địa chỉ vào standard container mà bạn có nhu cầu tiến hành sửa chữa thay thế, len là số lượng kí tự vào standard container cơ mà bạn muốn chũm, str là đoạn kí tự new được ghxay vào vào 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 công dụng đoạn lịch trình trên với hình dung coi test điều gì vừa ra mắt.

*

Tại địa điểm pos của string gốc, lịch trình xóa đi len kí từ, cùng ckém str vào string nơi bắt đầu trên ví trí pos. Đó là giải pháp mà lại cách thức replace vận động.

Tìm kiếm

Có các cách tiến hành vào lớp string được khái niệm cho các trường đúng theo tra cứu kiếm phức tạp. Mình chỉ trả lời chúng ta thực hiện cách thức find của lớp string để tìm tìm địa điểm mở ra của chuỗi nhỏ phía bên trong đối tượng người sử dụng nhưng ai đang dùng làm Hotline cách thức find.

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

string name_danh mục = "Le Tran Dat Nguyen Chiem Minc Vu Ngo Doan Tuan Le Dinc Huy";Thử in name_danh sách ra màn hình:

*

Yêu cầu nhập lệ một cái tên trường đoản cú keyboard và xác định coi thương hiệu đó có sống thọ trong danh sách bên trên hay là không.

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

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

Tìm tìm sự xuất hiện thêm của chuỗi con str bên phía trong standard container của đối tượng người sử dụng mà các bạn dùng để làm call cách thức find, địa chỉ bước đầu tra cứu tìm mặc định là 0.

string name;cout << "Enter a name: ";getline(cin, name);int32_t search_index = name_list.find(name);Nếu name được kiếm tìm thấy bên trong name_list, biến hóa search_index đang dấn giá tốt trị là chỉ sổ cơ mà name được search thấy. Nếu ko được tìm kiếm thấy, biến chuyển search_index nhấn giá trị -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 so với Việc áp dụng hàm strstr vào tlỗi viện cstring để tìm kiếm tìm vào mảng kí từ.

So sánh 2 string

Phxay đối chiếu 2 string cũng rất được tiến hành theo thứ từ bỏ từ điển (từ bỏ trái thanh lịch phải) giống 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;

Pmùi hương thức so sánh compare trả về một quý hiếm số nguyên ổn. Tương trường đoản cú như so sánh 2 mảng kí từ bỏ bởi hàm strcmp, cực hiếm trả về vẫn là một trong những trong 3 ngôi trường hợp:

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

Điều này có nghĩa câu chữ của hai chuỗi kí trường đoản cú này hoàn toàn kiểu như 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ề nhỏ dại hơn 0:

Điều này còn có nghĩa trên vị trí phân phát hiện cặp kí tự không cân đối thân str1 và str2 tạm bợ điện thoại tư vấn là vị trí index_not_match, ta có:

str1 < str

Ví dụ:

string str1 = "abcDEF";string str2 = "abcdef";Khi so sánh string str1 và string str2 như trên bằng mẫu lệnh str1.compare(str2), ta nhấn giá tốt trị trả về nhỏ tuổi hơn 0, vày trên địa chỉ bao gồm chỉ số là 3, kí từ "D" của str1 tất cả mã ASCII nhỏ hơn kí trường đoản cú "d" của str2.

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

trái lại với vấn đề quý hiếm trả về nhỏ rộng 0. Mình lấy lại ví dụ trên:

string str1 = "abcDEF";string str2 = "abcdef";Nếu chúng ta triển khai đối chiếu nhỏng sau:

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

Một phương pháp áp dụng khác của thủ tụ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 đến vị trí bước đầu đối chiếu. Tại địa chỉ gồm chỉ số 7, mình lôi ra 10 kí từ liên tục nhau nhằm lần lượt đối chiếu với chuỗi "comparison" được bản thân truyền vào sinh sống đối số máy 3 vào phương thức compare.

*

Cmùi hương trình vạc hiện 2 chuỗi kí từ bỏ bé này tương tự nhau, nên quý giá trả về là 0.

Tổng kết

Kiểu dữ liệu string trong C++ hổ trợ đến bọn họ cực kỳ thỉnh thoảng thao tác với chuỗi kí trường đoản cú. Vì nắm, mình ưu tiên mni-alive.com-style string rộng Việc sử dụng C-style string.

Hẹn chạm mặt lại các bạn trong bài học tiếp sau vào khóa đào tạo xây dựng C++ hướng thực hành.

Mọi chủ ý góp sức hoặc thắc mắc hoàn toàn có thể đặt thắc mắc trực tiếp tại diễn đàn.

www.mni-alive.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