课本学习
主要是熟悉stringsteam常用的几个例子。
P378页
stringstream provides an interface to manipulate strings as if they were input/ouput streams.
代码
- 第一个例子,主要用来实现字符串和浮点数(整数)的相互转换
#include <iostream>
#include <string>
#include <sstream>
#include <cmath>
std::string double_to_string( double val );
double string_to_double( std::string s );
int main( void )
{
const double PI = 4*std::atan(1.0);
std::string s = double_to_string(PI);
std::cout << s << std::endl;
double val = string_to_double( s );
std::cout << val << std::endl;
return 0;
}
std::string double_to_string( double val )
{
std::stringstream ss;
ss << val;
return ss.str(); // returns a string object with a copy of the current contents of the stream
}
double string_to_double( std::string s )
{
std::stringstream ss;
double ret = 0.0;
ss << s;
ss >> ret;
return ret;
}
- 第二个例子,用来解析以空白符作为分隔符的单词序列。当然对于诸如“,”这种符号,可以先替换成空白符,比如space。在进行下面的操作。
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
std::vector<std::string> extract_words( const std::string& line );
int main( void )
{
std::string line;
std::cout << "Please enter a line: ";
std::getline( std::cin, line );
std::vector<std::string> words = extract_words( line );
typedef std::vector<std::string>::const_iterator const_iter;
const_iter b = words.begin();
const_iter e = words.end();
while( b != e )
{
std::cout << *b << std::endl;
++b;
}
return 0;
}
std::vector<std::string> extract_words( const std::string& line )
{
std::stringstream ss(line);
std::vector<std::string> ret;
while( !ss.eof() )
{
std::string s;
ss >> s;
ret.push_back(s);
}
return ret;
}