In C++, std::cin is used to accept the input from the standard input device. By default, the delimiter used by std::cin to separate input is a whitespace. In this article, we will learn how to take std::cin input with spaces in C++.
Example:
Input: Hey! Geek Welcome to GfG //input with spaces
Output: Input Entered: Hey! Geek Welcome to GfG
std::cin Input with Spaces in C++
To take std::cin input with spaces we need to customize the behavior of the standard input stream by treating the newline character (‘\n’) as a delimiter in place of a space. To achieve this use the below approach:
Approach:
- Define a custom locale facet that modifies the character classification table used by the locale to alter how characters are interpreted by the input stream.
-
Inside the custom locale change the classification of the newline character (
'\n'
) to be considered as a space character. -
Finally, apply the custom locale by using
cin.imbue()
to set the locale of thestd::cin
with a new locale.
C++ Program to Take std::cin Input with Spaces
The below program demonstrates how we can take std::cin input with spaces in C++.
C++
// C++ program to take std::cin input with spaces #include <iostream> #include <locale> // to work with locales #include <string> using namespace std;
// Defining a structure that inherits from ctype<char> struct changeDelimiter : ctype< char > {
// Constructor for changeDelimiter
changeDelimiter()
: ctype< char >(
createTable()) // Initializing the base class
// ctype<char> with a table
{
}
// Static function to create a table with custom
// settings
static mask const * createTable()
{
static mask
rc[table_size]; // Creating a table with the
// size of the character set
rc[ '\n' ]
= ctype_base::space; // Set the newline
// character to be treated
// as whitespace
return rc; // Return the modified table
}
}; int main()
{ // Creating a custom locale with the changeDelimiter
// facet
cin.imbue(locale(cin.getloc(), new changeDelimiter));
// prompt the user to enter the input with spaces
cout << "Enter Input with Spaces: " << endl;
string inputString;
// Read input from cin, which has the modified locale
cin >> inputString;
// Print the input string
cout << "Input Entered: " << inputString << endl;
} |
Output
Enter Input with Spaces:
Hey! Geek Welcome to GfG
Input Entered: Hey! Geek Welcome to GfG