在C ++中将数字转换为字符串的最佳方法?

Best way to cast numbers into strings in C++?

本问题已经有最佳答案,请猛点这里访问。

来自C#背景,在C#中,我可以写下:

1
2
3
4
5
int int1       = 0;
double double1 = 0;
float float1   = 0;

string str ="words" + int1 + double1 + float1;

…而对字符串的强制转换是隐式的。在C++中,我理解强制转换必须是明确的,我想知道这个问题通常是如何由C++程序员处理的?

我已经知道网上有很多信息了,但似乎有很多方法可以做到这一点,我想知道是否有一个标准的做法?

如果您要在C++中编写上述代码,您会怎么做?


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/

在这种情况下,您需要的是sprintf()snprintf()。格式说明符在源代码本身中使您的意图非常明显。


将数字转换成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;    
}