如何将 std::string 和 int 连接起来。

26 浏览
0 Comments

如何将 std::string 和 int 连接起来。

我认为这应该非常简单,但它却带来了一些困难。如果我有

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

如何将它们结合起来获得一个单一的字符串\"John21\"

admin 更改状态以发布 2023年5月21日
0
0 Comments

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

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

0
0 Comments

按字母顺序排列:\n

std::string name = "John";
int age = 21;
std::string result;
// 1. with Boost
result = name + boost::lexical_cast(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);

\n

    \n

  1. 安全但慢,需要 Boost(仅包含头文件),适用于大多数/所有平台
  2. \n

  3. 安全且需要 C++11(to_string() 已经包含在 #include 中)
  4. \n

  5. 安全且快速,需要编译 FastFormat,适用于大多数/所有平台
  6. \n

  7. (同上)
  8. \n

  9. 安全且快速,需要 {fmt} 库,可以编译或使用头文件方式,适用于大多数/所有平台
  10. \n

  11. 安全但慢且冗长,需要 #include (标准 C++)
  12. \n

  13. 脆弱(必须提供足够大的缓冲区)、快速且冗长;itoa() 是一种非标准扩展,不能保证在所有平台上都可用
  14. \n

  15. 脆弱(必须提供足够大的缓冲区)、快速且冗长;不需要任何东西(是标准 C++ );所有平台
  16. \n

  17. 脆弱(必须提供足够大的缓冲区),可能是最快的转换方法,冗长;需要 STLSoft(仅包含头文件),适用于大多数/所有平台
  18. \n

  19. 较安全(在单个语句中不使用超过一个int_to_string() 调用),快速;需要 STLSoft(仅包含头文件),仅适用于 Windows
  20. \n

  21. 安全但慢,需要 Poco C++;适用于大多数/所有平台
  22. \n

0