我原以为这很简单,但它出现了一些困难。如果我有

std::string name = "John";
int age = 21;

我如何结合他们得到一个单一的字符串“John21”?


当前回答

#include <iostream>
#include <sstream>

std::ostringstream o;
o << name << age;
std::cout << o.str();

其他回答

你可以像这样使用C函数itoa():

    char buf[3];
    itoa(age, buf, 10);
    name += buf;

std::ostringstream是一个很好的方法,但有时这个额外的技巧可能会很方便地将格式转换为一行程序:

#include <sstream>
#define MAKE_STRING(tokens) /****************/ \
    static_cast<std::ostringstream&>(          \
        std::ostringstream().flush() << tokens \
    ).str()                                    \
    /**/

现在你可以这样格式化字符串:

int main() {
    int i = 123;
    std::string message = MAKE_STRING("i = " << i);
    std::cout << message << std::endl; // prints: "i = 123"
}
#include <iostream>
#include <sstream>

std::ostringstream o;
o << name << age;
std::cout << o.str();

作为一行:name += std::to_string(年龄);

有更多的选项可以用来连接整数(或其他数字对象)与字符串。它就是Boost。格式

#include <boost/format.hpp>
#include <string>
int main()
{
    using boost::format;

    int age = 22;
    std::string str_age = str(format("age is %1%") % age);
}

还有Boost的Karma。精神(v2)

#include <boost/spirit/include/karma.hpp>
#include <iterator>
#include <string>
int main()
{
    using namespace boost::spirit;

    int age = 22;
    std::string str_age("age is ");
    std::back_insert_iterator<std::string> sink(str_age);
    karma::generate(sink, int_, age);

    return 0;
}

提振。Spirit Karma声称是整数到字符串转换的最快选择之一。