其他分享
首页 > 其他分享> > c – 如何连接std :: string和int?

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