Best way to cast numbers into strings in C++?
来自
1 2 3 4 5 | int int1 = 0; double double1 = 0; float float1 = 0; string str ="words" + int1 + double1 + float1; |
…而对字符串的强制转换是隐式的。在
我已经知道网上有很多信息了,但似乎有很多方法可以做到这一点,我想知道是否有一个标准的做法?
如果您要在
C++中的字符串实际上是字节的容器,所以我们必须依靠额外的功能来为我们这样做。
在C++ 03的旧时代,我们通常使用I/O流的内置词汇转换工具(通过格式化输入):
1 2 3 4 5 6 7 8 | int int1 = 0; double double1 = 0; float float1 = 0; std::stringstream ss; ss <<"words" << int1 << double1 << float1; std::string str = ss.str(); |
您可以使用各种I/O操作器对结果进行微调,就像在EDCOX1×0格式字符串中那样(这仍然是有效的,并且在一些C++代码中仍然可见)。
还有其他一些方法,可以单独转换每个参数,然后依赖于连接所有生成的字符串。EDOCX1 1提供了这一点,就像C++ 11的EDOCX1〉2那样:
1 2 3 4 5 6 7 8 | int int1 = 0; double double1 = 0; float float1 = 0; std::string str ="words" + std::to_string(int1) + std::to_string(double1) + std::to_string(float1); |
不过,后一种方法并不能让您控制数据的表示方式(演示)。
std::stringstream std::to_string
如果你可以使用BooS.ListCasC铸造(即使C++ 98也可用),那么它是非常简单的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <boost/lexical_cast.hpp> #include <iostream> int main( int argc, char * argv[] ) { int int1 = 0; double double1 = 0; float float1 = 0; std::string str ="words" + boost::lexical_cast<std::string>(int1) + boost::lexical_cast<std::string>(double1) + boost::lexical_cast<std::string>(float1) ; std::cout << str; } |
活生生的例子。
注意,在C++ 11中,也可以使用EcOxx1,4,正如@ LigthnasraceSin轨道所提到的那样。
作为一个C开发人员,我将使用C字符串函数,因为它们在C++中是完全有效的,并且对于数字的格式(即整数、浮点等)来说,你非常明确。
http://www.cplusplus.com/reference/cstio/printf/
在这种情况下,您需要的是
将数字转换成STD::C++中的字符串是使用已经可用的字符串的最好方法。库sFr提供为STD::字符串的流实现。例如,它就像使用流(cout、cin)
易于使用:http://www.cplusplus.com/reference/sstream/stringstream/?横流
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <sstream> using std::streastring; #include <string> using std::string; #include <iostream> using std::cout; using std::endl; int main(){ stringstream ss; string str; int i = 10; ss << i; ss >> str; cout << str << endl; } |