Cara Membaca String dengan Spasi Menggunakan cin
di C++
Dalam pemrograman C++, cin
adalah objek yang digunakan untuk membaca input dari pengguna. Namun, cin
memiliki keterbatasan dalam membaca string yang mengandung spasi. Secara default, cin
akan berhenti membaca string saat menemukan spasi putih (spasi, tab, newline).
Berikut ini beberapa cara untuk mengatasi masalah ini:
1. Menggunakan getline()
getline()
adalah fungsi yang dapat digunakan untuk membaca seluruh baris input, termasuk spasi. Fungsi ini mengambil dua argumen: objek cin
dan sebuah variabel string yang akan menyimpan input.
#include
#include
using namespace std;
int main() {
string input;
cout << "Masukkan kalimat: ";
getline(cin, input);
cout << "Kalimat yang dimasukkan: " << input << endl;
return 0;
}
2. Menggunakan cin.ignore()
cin.ignore()
digunakan untuk mengabaikan karakter tertentu dari input buffer. Dengan menggunakan fungsi ini, kita dapat mengabaikan karakter newline yang tersisa di buffer setelah membaca input sebelumnya.
#include
#include
using namespace std;
int main() {
string input;
cout << "Masukkan kalimat: ";
cin.ignore(); // Mengabaikan karakter newline dari buffer
getline(cin, input); // Membaca seluruh baris
cout << "Kalimat yang dimasukkan: " << input << endl;
return 0;
}
3. Menggunakan cin.get()
cin.get()
adalah fungsi yang dapat digunakan untuk membaca karakter per karakter dari input. Dengan fungsi ini, kita dapat membaca string yang mengandung spasi dengan menggunakan loop.
#include
#include
using namespace std;
int main() {
string input;
char karakter;
cout << "Masukkan kalimat: ";
while (cin.get(karakter) && karakter != '\n') {
input += karakter;
}
cout << "Kalimat yang dimasukkan: " << input << endl;
return 0;
}
4. Menggunakan cin.rdbuf()->getline()
Metode ini menggunakan rdbuf()
untuk mendapatkan pointer ke streambuf
dari objek cin
. Kemudian, kita dapat menggunakan getline()
dari streambuf
untuk membaca seluruh baris input, termasuk spasi.
#include
#include
using namespace std;
int main() {
string input;
cout << "Masukkan kalimat: ";
cin.rdbuf()->getline(input, 100); // Membaca maksimal 100 karakter
cout << "Kalimat yang dimasukkan: " << input << endl;
return 0;
}
Penjelasan Lebih Lanjut
-
getline()
: Fungsi ini merupakan pilihan yang paling umum digunakan untuk membaca string dengan spasi. Fungsi ini dapat membaca seluruh baris input hingga karakter newline ditemukan. -
cin.ignore()
: Fungsi ini dapat digunakan untuk membersihkan input buffer dari karakter yang tidak diinginkan. Biasanya, fungsi ini digunakan untuk mengabaikan karakter newline yang tersisa di buffer setelah membaca input sebelumnya menggunakancin
. -
cin.get()
: Fungsi ini dapat digunakan untuk membaca karakter per karakter dari input. Fungsi ini memungkinkan kita untuk membaca string dengan spasi dengan menggunakan loop. -
cin.rdbuf()->getline()
: Metode ini memberikan akses langsung kestreambuf
dari objekcin
. Dengan menggunakan metode ini, kita dapat menggunakangetline()
daristreambuf
untuk membaca seluruh baris input.
Pilihan metode yang tepat tergantung pada kebutuhan program. Gunakan metode yang paling sesuai dengan kebutuhan dan preferensi Anda.