Cách nhập chuỗi trong C++
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ẻ!