c – 如何连接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,必须编译;大多数/所有平台
>(同上)
>安全,快速;需要the {fmt} library,可以在仅头模式下编译或使用;大多数/所有平台
>安全,缓慢,冗长;需要#include< sstream> (来自标准C)
>很脆弱(你必须提供足够大的缓冲区),快速,冗长; itoa()是非标准扩展,并不保证可用于所有平台
>很脆弱(你必须提供足够大的缓冲区),快速,冗长;什么都不需要(标准C);所有平台
>很脆弱(你必须提供足够大的缓冲区),probably the fastest-possible conversion,详细;需要STLSoft(仅限标题);大多数/所有平台
> safe-ish(您不会在一个语句中使用多个int_to_string()调用),速度快;需要STLSoft(仅限标题);仅Windows
>是安全的,但很慢;要求Poco C++;大多数/所有平台
标签:c,concatenation,int,stdstring 来源: https://codeday.me/bug/20190911/1803516.html