lexical_cast 使用 Reference

数值与字符串转换之用,更方便,安全,有效。

使用

#include <boost/lexical_cast.hpp>
#include <boost/random.hpp>
#include <iostream>
#include <vector>

using namespace std;

string number_to_string(const vector<int> &ivec);
vector<int> gen_ivec(const int &low, const int &top);
vector<int> string_to_number(const string &s);

int main(int argc, char **argv)
{
	vector<int> ivec = gen_ivec(1, 100);
	

	cout << "Begin int to string..." << endl;
	string res = number_to_string(ivec);
	cout << res << endl;

	cout << "Begin string to int..." << endl;
	vector<int> ivec_handle = string_to_number(res);

	for (vector<int>::iterator iter=ivec_handle.begin();
		iter!=ivec_handle.end(); ++iter)
	{
		cout << *iter;
	}
	cout << endl;

	return 0;
}

/*
*	convert an array of integers to string whiche divided by "="
*/
string number_to_string(const vector<int> &ivec)
{
	string ret;

	for (vector<int>::const_iterator iter=ivec.begin(); 
		iter!=ivec.end(); ++iter)
	{
		ret = ret + boost::lexical_cast<string>(*iter) + "=";
	}

	return ret;
}


/*
*	convert string to an array of integers
*/
vector<int> string_to_number(const string &s)
{
	vector<int> ivec;

	for (string::const_iterator iter=s.begin();
		iter!=s.end(); ++iter)
	{
		try
		{
			ivec.push_back(boost::lexical_cast<int>(*iter));
		}
		catch (const boost::bad_lexical_cast&){} // skip it
	}

	return ivec;
}


/*
* generate random number
*/
vector<int> gen_ivec(const int &low, const int &top)
{
	vector<int> ivec; 

	boost::uniform_int<> distribution(low, top) ;
	boost::mt19937 engine;
	boost::variate_generator<boost::mt19937, boost::uniform_int<>> irandom (engine, distribution);

	for (int i=low; i<top; ++i)
	{
		ivec.push_back(irandom());
		//cout << irandom() << ", ";
	}

	return ivec;
}

Reference

boost