如何连接一个std :: string和一个int?

我认为这会很简单,但是会带来一些困难。 如果我有

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

我如何将它们结合起来得到一个字符串"John21"


按字母顺序排列:

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

// 1. with Boost
result = name + boost::lexical_cast<std::string>(age);

// 2. with C++11
result = name + std::to_string(age);

// 3. with FastFormat.Format
fastformat::fmt(result, "{0}{1}", name, age);

// 4. with FastFormat.Write
fastformat::write(result, name, age);

// 5. with the {fmt} library
result = fmt::format("{}{}", name, age);

// 6. with IOStreams
std::stringstream sstm;
sstm << name << age;
result = sstm.str();

// 7. with itoa
char numstr[21]; // enough to hold all numbers up to 64-bits
result = name + itoa(age, numstr, 10);

// 8. with sprintf
char numstr[21]; // enough to hold all numbers up to 64-bits
sprintf(numstr, "%d", age);
result = name + numstr;

// 9. with STLSoft's integer_to_string
char numstr[21]; // enough to hold all numbers up to 64-bits
result = name + stlsoft::integer_to_string(numstr, 21, age);

// 10. with STLSoft's winstl::int_to_string()
result = name + winstl::int_to_string(age);

// 11. With Poco NumberFormatter
result = name + Poco::NumberFormatter().format(age);
  • 是安全的,但很慢; 需要Boost(仅限标题); 大多数/所有平台
  • 是安全的,需要C ++ 11(to_string()已经包含在#include <string>
  • 安全,快捷; 需要FastFormat,它必须被编译; 大多数/所有平台
  • 安全,快捷; 需要FastFormat,它必须被编译; 大多数/所有平台
  • 安全,快捷; 需要{fmt}库,它可以被编译或仅用于头标模式; 大多数/所有平台
  • 安全,缓慢和冗长; 需要#include <sstream> (来自标准C ++)
  • 是脆弱的(你必须提供一个足够大的缓冲区),快速且冗长; itoa()是一个非标准扩展,并不保证可用于所有平台
  • 是脆弱的(你必须提供一个足够大的缓冲区),快速且冗长; 不需要任何东西(是标准的C ++); 所有平台
  • 是脆弱的(你必须提供足够大的缓冲区),可能是最快可能的转换,详细; 需要STLSoft(仅限标题); 大多数/所有平台
  • safe-ish(你不会在一个语句中使用多个int_to_string()调用),速度快; 需要STLSoft(仅限标题); 仅Windows
  • 是安全的,但很慢; 需要Poco C ++; 大多数/所有平台

  • 在C ++ 11中,你可以使用std::to_string ,例如:

    auto result = name + std::to_string( age );
    

    如果你有Boost,你可以使用boost::lexical_cast<std::string>(age)将整数转换为一个字符串。

    另一种方法是使用stringstreams:

    std::stringstream ss;
    ss << age;
    std::cout << name << ss.str() << std::endl;
    

    第三种方法是使用C库中的sprintfsnprintf

    char buffer[128];
    snprintf(buffer, sizeof(buffer), "%s%d", name.c_str(), age);
    std::cout << buffer << std::endl;
    

    其他海报建议使用itoa 。 这不是一个标准函数,所以如果你使用它的话你的代码将不可移植。 有编译器不支持它。

    链接地址: http://www.djcxy.com/p/24853.html

    上一篇: How to concatenate a std::string and an int?

    下一篇: How to use GROUP BY to concatenate strings in MySQL?