Bài viết này mình sẽ hướng dẫn các bạn cách nhập chuỗi trong ngôn ngữ C++. Hi vọng sau khi đọc bài viết này các bạn có thể làm việc với chuỗi thành thạo hơn.

Nội dung

Nhập chuỗi trong C++ bằng hàm getline

Cú pháp

getline(std::cin, variable);

Lưu ý: Chúng ta cần sử dụng thư viện string.

Ví dụ

#include <iostream>
#include <string>

using namespace std;

int main() {
    string name;
    cout << "Enter your name: ";
    getline(cin, name);
    cout << "Hi " << name << endl;
    return 0;
}

Sau khi thực hiện chương trình chúng ta tiến hành nhập ‘Vo Van Tam’ và nhận được kết quả như sau:

Enter your name: Vo Van Tam
Hi Vo Van Tam

Vấn đề bị trôi lệnh khi nhập chuỗi

Đây là một vấn đề thường gặp, chúng ta cùng xem ví dụ sau:

#include <iostream>
#include <string>

using namespace std;

int main() {
    int age;
    cout << "Enter your age: ";
    cin >> age;

    string name;
    cout << "Enter your name: ";
    getline(cin, name);

    cout << "Your age: " << age << endl;
    cout << "Your name: " << name << endl;
    return 0;
}

Sau khi chạy chương trình thì chúng ta nhận được kết quả như sau:

Enter your age: 20
Enter your name: Your age: 20
Your name:

Tại sao? Lý do là khi bạn nhập 20 thì bạn đã gõ phím enter. Lúc này trong bộ nhớ của cin sẽ là 20\n. Giá trị 20 thì được chuyển cho việc gán giá trị biến age, còn giá trị \n thì được chuyển cho việc gán giá trị biến name. Điều này đồng nghĩa với việc biến name được gán giá trị rỗng (giá trị "").

Để kiểm tra chúng ta có thể thực hiện đoạn code sau:

#include <iostream>
#include <string>

using namespace std;

int main() {
    int age;
    cout << "Enter your age: ";
    cin >> age;

    string name;
    cout << "Enter your name: ";
    getline(cin, name);

    cout << "Your age: " << age << endl;
    cout << "Is name empty: " << (name == "") << endl;
    return 0;
}

Kết quả:

Enter your age: 20
Enter your name: Your age: 20
Is name empty: 1

Kết quả của phép so sánh là 1 tức là chúng ta đã đoán đúng vấn đề.

Cách khắc phục:

Để khắc phục thì chúng ta đơn giản chỉ cần bỏ qua một kí tự \n sau khi nhập số mà thôi. Chúng ta có thể sử dụng lênh cin.ignore(); cho việc này.

#include <iostream>
#include <string>

using namespace std;

int main() {
    int age;
    cout << "Enter your age: ";
    cin >> age;

    string name;
    cin.ignore();
    cout << "Enter your name: ";
    getline(cin, name);

    cout << "Your age: " << age << endl;
    cout << "Your name: " << name << endl;
    return 0;
}

Kết quả:

Enter your age: 20
Enter your name: Vo Van Tam
Your age: 20
Your name: Vo Van Tam

Nhập chuỗi trong C++ bằng hàm cin.get

Cú pháp

cin.get(variable, size);

Lưu ý: size chính là độ dài tối đa của con trỏ chuỗi.

Ví dụ

Cùng xem ví dụ dưới đây về nhập chuỗi với hàm cin.get

#include <iostream>

using namespace std;

int main() {
    int age;
    cout << "Enter your age: ";
    cin >> age;

    int size = 128;
    char *name = new char[size];
    cout << "Enter your name: ";
    cin.ignore();
    cin.get(name, size);

    cout << "Your age: " << age << endl;
    cout << "Your name: " << name << endl;
    return 0;
}

Kết quả:

Enter your age: 20
Enter your name: Vo Van Tam
Your age: 20
Your name: Vo Van Tam

Như vậy hàm getline được sử dụng nếu bạn nhập chuỗi với string, còn hàm cin.get thì lại được sử dụng để nhập chuỗi với con trỏ char.

Cám ơn các bạn đã theo dõi, chúc các bạn một ngày vui vẻ!