C++ std::string 与数字型别互转
C 的 atoi 跟 itoa 等价的字串数字互转,可以用 C++ 的 ostream::operator>> 与istream::operator<< 所提供的 FormattedInputFunction 与 FormattedOutputFunction 来取代。因为 Stream 本身就是一个大字串了,STL 为了要将标準 Stream Unformated Data,传达到 C++ 的 Typed System,自己就写了一大份数值转换 Functions 放在 Iostream 系统裡。
string to double
string str_pi = "3.14";
double pi = 0.0;
sringstream(pi) >> pi;
stringstream(pi) > pi
就像是 cin >> pi 一样,会把你打入的字串,转换成数字。
double to string
double pi = 3.14;
string str_pi = (stringstream() << pi).str();
stringstream() 会产生一个暂时物件 t
t << pi 运算会回传吃进 pi:3.14的 stringstream:t
t.str() 会回传内部 string 的 buffer
不只有 typesafe,还有丰富的 type 支援
to string
basic_ostream& operator<<( short value );
basic_ostream& operator<<( unsigned short value );
basic_ostream& operator<<( int value );
basic_ostream& operator<<( unsigned int value );
basic_ostream& operator<<( long value );
basic_ostream& operator<<( unsigned long value );
basic_ostream& operator<<( long long value );
basic_ostream& operator<<( unsigned long long value );
basic_ostream& operator<<( float value );
basic_ostream& operator<<( double value );
basic_ostream& operator<<( long double value );
basic_ostream& operator<<( bool value );
basic_ostream& operator<<( const void* value );
to numeric type
basic_istream& operator>>( short& value );
basic_istream& operator>>( unsigned short& value );
basic_istream& operator>>( int& value );
basic_istream& operator>>( unsigned int& value );
basic_istream& operator>>( long& value );
basic_istream& operator>>( unsigned long& value );
basic_istream& operator>>( long long& value );
basic_istream& operator>>( unsigned long long& value );
basic_istream& operator>>( float& value );
basic_istream& operator>>( double& value );
basic_istream& operator>>( long double& value );
basic_istream& operator>>( bool& value );
basic_istream& operator>>( void*& value );
麻烦的地方
要 #include
数字需要 lvalue
若要判断转换是否成功,不能用 temporary stringstream() ,要用 lvalue 的stringstream,因为转换状态是放在 stringstream 本体,使用 temporary 会在那行结束时即消失,无法得知信息。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

C++ std::string 与数字型别互转有点意思!