Khởi tạo, gán giá trị và nhập xuất chuỗi (string) trong C++
Chuỗi (String) là một đối tượng đại diện cho chuỗi các kí tự. Đây là một đối tượng khá phổ biến và được sử dụng rộng rãi trong ngôn ngữ lập trình C++. Vì vậy, việc nắm được các thao tác để làm việc với chuỗi là rất quan trọng. Trong bài viết này, Isinhvien sẽ chia sẻ đến các bạn những thao tác cơ bản về khởi tạo, gán giá trị, nhập xuất và các lưu ý quan trọng khi làm việc với chuỗi nhé!
Khai báo, khởi tạo và gán giá trị cho chuỗi
Đầu tiên, để khai báo chuỗi, ta cần phải #include thư viện <string> thuộc namespace std.
Cú pháp:
string tên_biến;
Để gán giá trí cho chuỗi, ta có thể gán bằng nhiều cách:
- Gán trực tiếp giá trị cho chuỗi
- Lấy giá trị từ một chuỗi có sẵn
Ví dụ:
#include<iostream> #include<string> using namespace std; string str; string str("");// Khởi tạo chuỗi str rỗng string str1("Isinhvien"); // Khởi tạo "Isinhvien" cho str1 string str3 = "Isinhvien";// Khởi tạo "Isinhvien" cho str3 string str4 = str1;//Khởi tạo str4 và gán giá trị str1 cho str4
Xuất chuỗi trong C++
Để xuất một chuỗi kí tự, ta sẽ dùng giống với các kiểu dữ liệu khác.
cout << tên_chuỗi ;
Ví dụ:
#include <iostream> #include <string> using namespace std; int main() { string strName = "Isinhvien"; cout << strName; }
Kết quả thực thi
Isinhvien
Nhập chuỗi trong C++
Ngôn ngữ C++ có nhiều cách để nhập giá trị cho một chuỗi, vì vậy hãy hình dung cho mình chuỗi sắp nhập có dạng như thế nào để chọn phương thức nhập cho phù hợp.
1. Nhập chuỗi sử dụng Cin
Đây là phương thức nhập cơ bản cho mọi biến dữ liệu cơ bản, để đọc một thông tin nào đó từ thiết bị nhập chuẩn (mặc định là bàn phím), sau đó lưu thông tin đó vào một biến. Thử dùng nó với string nhé!
#include <iostream> #include <string> using namespace std; int main() { cout << "Nhap ten cua ban: "; string strName; cin >> strName; cout << "Nhap tuoi cua ban: "; string strAge; cin >> strAge; cout << "Ten cua ban la: " << strName << endl; cout << "Tuoi: " << strAge << endl; return 0; }
Kết quả thực thi khi chuỗi ta nhập vào không có khoảng trắng.
Nhap ten cua ban: isinhvien Nhap tuoi cua ban: 5 Ten cua ban la: isinhvien Tuoi: 5
Kết quả thực thi khi chuỗi ta nhập vào có khoảng trắng. Khi đó, chương trình sẽ bỏ qua lần nhập tiếp theo và xuất ra kết quả.
Nhap ten cua ban: I Sinh Vien Nhap tuoi cua ban: Ten cua ban la: I Tuoi: Sinh
Vì thế, ta cần dùng hàm getline để có thể nhập xuất chuỗi có chứa khoảng trắng. Chi tiết xem ở bên dưới nhé!
2. Nhập chuỗi có chứa khoảng trắng sử dụng getline
Sử dụng hàm getline để có thể đọc đầy đủ chuỗi có khoảng trắng từ đối tượng nhập của lớp iostream (ví dụ cin).
#include <iostream> #include <string> using namespace std; int main() { cout << "Nhap ten cua ban: "; string strName; getline(cin, strName); cout << "Nhap tuoi cua ban: "; string strAge; getline(cin, strAge); cout << "Ten cua ban la: " << strName << endl; cout << "Tuoi: " << strAge << endl; return 0; }
Kết quả thực thi
Nhap ten cua ban: I Sinh Vien Nhap tuoi cua ban: 5 Ten cua ban la: I Sinh Vien Tuoi: 5
3. Lưu ý quan trọng khi sử dụng cin và getline
Xem ví dụ sau đây:
#include <iostream> #include <string> using namespace std; int main() { cout << "Nhap tuoi cua ban: "; int Age; cin >> Age; cout << "Nhap ten cua ban: "; string strName; getline(cin, strName); cout << "Tuoi: " << Age << endl; cout << "Ten cua ban la: " << strName << endl; return 0; }
Kết quả thực thi
Nhap tuoi cua ban: 5
Nhap ten cua ban: Tuoi: 5
Ten cua ban la:
Tại sao kết quả lại sai như vậy?
Đó là do khi t nhập số 5 và nhấn Enter, đến khi nhập chuỗi thì hàm getline sẽ nhận kí tự Enter (\n) từ bộ nhớ đệm và kết thúc nhập. Do đó, ta sẽ không nhập được giá trị mong muốn cho strName.
Vậy làm sao để khắc phục điều này?
Ta chỉ cần xóa kí tự Enter (/n) trong bộ nhớ đệm trước khi thực hiện hàm getline bằng cách sử dụng phương thức cin.ignore()
std::cin.ignore(32767, '\n'); // Xóa khỏi bộ nhớ đệm 32767 ký tự, hoặc đến khi gặp ký tự '\n'
Chương trinh trên sẽ được viết lại như sau:
#include <iostream> #include <string> using namespace std; int main() { cout << "Nhap tuoi cua ban: "; int Age; cin >> Age; cin.ignore(32767, '\n'); cout << "Nhap ten cua ban: "; string strName; getline(cin, strName); cout << "Tuoi: " << Age << endl; cout << "Ten cua ban la: " << strName << endl; return 0; }
Kết quả thực thi bây giờ đã như mong muốn
Nhap tuoi cua ban: 5 Nhap ten cua ban: I Sinh Vien Tuoi: 5 Ten cua ban la: I Sinh Vien
4. Cách nhập một văn bản bao gồm kí tự xuống dòng
Hàm getline mặc định kết thúc khi nhấn phím Enter. Để nhập một văn bản gồm cả kí tự xuống dòng thì ta chỉ cần thay đổi dấu hiệu kết thúc bằng dấu ‘.’
getline(cin, str, '.');
Xem ví dụ sau đây:
#include <iostream> #include <string> using namespace std; int main() { string str; cout << "Nhap bai tho: "; getline(cin, str, '.'); // Nhập vào chuỗi kí tự đến khi chương trình nhận vào kí tự '.' cout << "Bai tho vua nhap: "<< endl << str ; return 0; }
Kết quả thực thi:
Nhap bai tho: Chu be loat choat Cai xac xinh xin Cai chan thoan thoat Cai dau ngenh ngenh. Bai tho vua nhap: Chu be loat choat Cai xac xinh xin Cai chan thoan thoat Cai dau ngenh ngenh
Hi vọng sau bài viết này thì các bạn sẽ thành thạo được cách khởi tạo, gán giá trị và nhập xuất với chuỗi trong ngôn ngữ C++ nhé! Nếu thấy bài viết này của Isinhvien hay và bổ ích thì hãy chia sẻ nó đến với bạn bè của mình để ủng hộ cho Isinhvien và giúp Isinhvien ngày càng phát triển hơn nhé! Chúc các bạn thành công!