Processing strings using std::istringstream
Last Updated :
28 Jul, 2021
The std::istringstream is a string class object which is used to stream the string into different variables and similarly files can be stream into strings. Objects of this class use a string buffer that contains a sequence of characters. This sequence of characters can be accessed as a string object.
Header File:
#include <sstream>
1. Streaming integer from a string with std::istringstream
One way to stream a string is to use an input string stream object std::istringstream from the header. Once a std::istringstream object has been created, then the string can be streamed and stored using the extraction operator(>>). The extraction operator will read until whitespace is reached or until the stream fails.
Below is the illustration of the std::istringstream:
CPP
#include <iostream>
#include <sstream>
#include <string>
using std::istringstream;
using std::string;
using std::cout;
int main()
{
string a( "1 2 3" );
istringstream my_stream(a);
int n;
my_stream >> n;
cout << n << "\n" ;
}
|
The std::istringstream object can also be used as a boolean to determine if the last extraction operation failed. This happens if there wasn’t any more of the string to the stream, For Example, If the stream still has more characters then we are able to stream the string again.
The extraction operator >> writes the stream to the variable on the right of the operator and returns the std::istringstream object, so the entire expression my_stream >> n is a std::istringstream object which returns a boolean i.e., true if stream is possible else return false.
Below is the implementation of using the std::istringstream in the above way:
Type 1
#include <iostream>
#include <sstream>
#include <string>
using std::istringstream;
using std::string;
using std::cout;
int main()
{
string a( "1 2 3" );
istringstream my_stream(a);
int n;
while (my_stream) {
my_stream >> n;
if (my_stream) {
cout << "That stream was successful: "
<< n << "\n" ;
}
else {
cout << "That stream was NOT successful!"
<< "\n" ;
}
}
return 0;
}
|
Type 2
#include <iostream>
#include <sstream>
#include <string>
using std::istringstream;
using std::string;
using std::cout;
int main()
{
string a( "1 2 3" );
istringstream my_stream(a);
int n;
while (my_stream >> n) {
cout << "That stream was successful: "
<< n << "\n" ;
}
cout << "That stream was NOT successful!"
<< "\n" ;
return 0;
}
|
Output:
That stream was successful: 1
That stream was successful: 2
That stream was successful: 3
That stream was NOT successful!
2. Strings with Mixed Types
In the above illustrations, the string contains only whitespaces and characters which could be converted to int. If the string has mixed types i.e., it contains more than one data type in the stream then it can be used as illustrated below.
Below is the illustration of the std::istringstream for the mixed types:
Program 1:
CPP
#include <iostream>
#include <sstream>
#include <string>
using std::istringstream;
using std::string;
using std::cout;
int main()
{
string str( "1, 2, 3" );
istringstream my_stream(str);
char c;
int n;
while (my_stream >> n >> c) {
cout << "That stream was successful: "
<< n << " " << c << "\n" ;
}
cout << "The stream has failed."
<< "\n" ;
return 0;
}
|
Output:
That stream was successful: 1,
That stream was successful: 2,
The stream has failed.
Program 2:
CPP
#include <iostream>
#include <sstream>
#include <string>
using std::istringstream;
using std::string;
using std::cout;
int main()
{
string str( "abc, def, ghi" );
istringstream my_stream(str);
string token;
size_t pos = -1;
while (my_stream >> token) {
while ((pos = token.rfind( ',' ))
!= std::string::npos) {
token.erase(pos, 1);
}
cout << token << '\n' ;
}
}
|
Reference: http://www.cplusplus.com/reference/sstream/istringstream/
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...