Bài tập

Khởi tạo, gán giá trị và nhập xuất chuỗi (string) trong C++

Huy Erick

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 rất phổ biến và được sử dụng rộng rãi trong ngôn ngữ lập trình C++. Vì vậy,...

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 rất 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 bắt 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, chúng ta sẽ cùng tìm hiểu về cách 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.

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 thuộc namespace std.

Cú pháp:

string tên_biến;

Để gán giá trị cho chuỗi, ta có thể sử dụng nhiều cách khác nhau:

  • 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 
#include 
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 có thể sử dụng cách tương tự như khi xuất các kiểu dữ liệu khác.

cout  tên_chuỗi;

Ví dụ:

#include 
#include 
using namespace std;

int main() {
    string strName = "Isinhvien";
    cout  strName;
    return 0;
}

Kết quả thực thi:

Isinhvien

Nhập chuỗi trong C++

Ngôn ngữ C++ cung cấp nhiều phương thức để 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 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. Hãy thử sử dụng phương thức này với chuỗi nhé!

#include 
#include 
using namespace std;

int main() {
    cout  "Nhập tên của bạn: ";
    string strName;
    cin >> strName;
    cout  "Nhập tuổi của bạn: ";
    string strAge;
    cin >> strAge;
    cout  "Tên của bạn là: "  strName  endl;
    cout  "Tuổi: "  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:

Nhập tên của bạn: isinhvien
Nhập tuổi của bạn: 5
Tên của bạn là: isinhvien
Tuổi: 5

Kết quả thực thi khi chuỗi ta nhập vào có khoảng trắng:

Nhập tên của bạn: I Sinh Vien
Nhập tuổi của bạn: 
Tên của bạn là: I
Tuổi: Sinh

Vì thế, ta cần sử 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.

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 
#include 
using namespace std;

int main() {
    cout  "Nhập tên của bạn: ";
    string strName;
    getline(cin, strName);
    cout  "Nhập tuổi của bạn: ";
    string strAge;
    getline(cin, strAge);
    cout  "Tên của bạn là: "  strName  endl;
    cout  "Tuổi: "  strAge  endl;
    return 0;
}

Kết quả thực thi:

Nhập tên của bạn: I Sinh Vien
Nhập tuổi của bạn: 5
Tên của bạn là: I Sinh Vien
Tuổi: 5

3. Lưu ý quan trọng khi sử dụng cingetline

Xem ví dụ sau đây:

#include 
#include 
using namespace std;

int main() {
    cout  "Nhập tuổi của bạn: ";
    int Age;
    cin >> Age;
    cout  "Nhập tên của bạn: ";
    string strName;
    getline(cin, strName);
    cout  "Tuổi: "  Age  endl;
    cout  "Tên của bạn là: "  strName  endl;
    return 0;
}

Kết quả thực thi:

Nhập tuổi của bạn: 5
Nhập tên của bạn: 
Tuổi: 5
Tên của bạn là: 

Tại sao kết quả lại sai như vậy?

Đó là do khi ta nhập số 5 và nhấn Enter, 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 trình trên sẽ được viết lại như sau:

#include 
#include 
using namespace std;

int main() {
    cout  "Nhập tuổi của bạn: ";
    int Age;
    cin >> Age;
    cin.ignore(32767, '\n');
    cout  "Nhập tên của bạn: ";
    string strName;
    getline(cin, strName);
    cout  "Tuổi: "  Age  endl;
    cout  "Tên của bạn là: "  strName  endl;
    return 0;
}

Kết quả thực thi bây giờ đã như mong muốn:

Nhập tuổi của bạn: 5
Nhập tên của bạn: I Sinh Vien
Tuổi: 5
Tên của bạn là: 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, ta chỉ cần thay đổi dấu hiệu kết thúc bằng dấu ‘.’.

Xem ví dụ sau đây:

#include 
#include 
using namespace std;

int main() {
    string str;
    cout  "Nhập bài thơ: ";
    getline(cin, str, '.'); // Nhập vào chuỗi kí tự đến khi chương trình nhận vào kí tự '.'
    cout  "Bài thơ vừa nhập:"  endl  str;
    return 0;
}

Kết quả thực thi:

Nhập bài thơ: Chu be loat choat Cai xac xinh xin Cai chan thoan thoat Cai dau ngenh ngenh.
Bài thơ vừa nhập:
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++. 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!

Bài viết khác liên quan đến chuỗi C++

1