如何连接 std::string 和 int
我认为这非常简单,但它带来了一些困难。 如果我有
std::string name = "John";
int age = 21;
如何将它们组合起来以获得单个字符串“John21”
?
I thought this would be really simple, but it's presenting some difficulties. If I have
std::string name = "John";
int age = 21;
How do I combine them to get a single string "John21"
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(25)
按字母顺序排列:
#include
中)#include
(来自标准 C++)In alphabetical order:
#include <string>
)#include <sstream>
(from standard C++)在 C++11 中,您可以使用
std::to_string
,例如:In C++11, you can use
std::to_string
, e.g.:如果您有 Boost,则可以使用
boost::lexical_cast(age)
将整数转换为字符串。另一种方法是使用字符串流:
第三种方法是使用 C 库中的 sprintf 或 snprintf。
其他发帖者建议使用
itoa
。 这不是标准函数,因此如果您使用它,您的代码将不可移植。 有些编译器不支持它。If you have Boost, you can convert the integer to a string using
boost::lexical_cast<std::string>(age)
.Another way is to use stringstreams:
A third approach would be to use
sprintf
orsnprintf
from the C library.Other posters suggested using
itoa
. This is NOT a standard function, so your code will not be portable if you use it. There are compilers that don't support it.无耻地从 http://www.research.att.com/~bs/bs_faq2 窃取。 html。
Shamelessly stolen from http://www.research.att.com/~bs/bs_faq2.html.
这是最简单的方法:
This is the easiest way:
如果您使用 C++11,则可以使用
std::to_string
。示例:
输出:
If you have C++11, you can use
std::to_string
.Example:
Output:
在我看来,最简单的答案是使用 sprintf 函数:
It seems to me that the simplest answer is to use the
sprintf
function:那么您的用法将类似于
Googled [并经过测试:p]
Then your usage would look something like this
Googled [and tested :p ]
您可以使用 C++20
std::format
(godbolt):
如果
std::format 不可用,您可以使用{fmt} 库,它基于:
免责声明:我是 {fmt} 库和 C++20
std::format
的作者。You can do it with C++20
std::format
(godbolt):If
std::format
is not available you can use the {fmt} library, it is based on:Disclaimer: I'm the author of the {fmt} library and C++20
std::format
.这个问题可以通过多种方式来完成。 我将通过两种方式展示它:
使用
to_string(i)
将数字转换为字符串。使用字符串流。
代码:
<前><代码>#include <字符串>;;
#include <流>
#include
#include
使用命名空间 std;
int main() {
字符串名称=“约翰”;
整数年龄=21;
字符串答案1 =“”;
// 方法 1). 字符串 s1 = to_string(年龄)。
字符串 s1=to_string(年龄); // 知道整数被转换成字符串
// 正如我们所知,在 C++ 中可以使用“+”轻松完成串联
答案1=姓名+s1;
计算<< 答案1 << 结束;
// 方法 2). 使用字符串流
ostringstream s2;
s2 << 年龄;
字符串 s3 = s2.str(); // str() 函数将数字转换为字符串
字符串答案2 =“”; // 用于字符串连接。
答案2=姓名+s3;
计算<< 答案2 << 结束;
返回0;
}
This problem can be done in many ways. I will show it in two ways:
Convert the number to string using
to_string(i)
.Using string streams.
Code:
作为一个衬垫:
name += std::to_string(age);
As a one liner:
name += std::to_string(age);
如果您想使用
+
来连接任何具有输出运算符的内容,您可以提供operator+
的模板版本:然后您可以直接编写连接way:
输出:
这不是最有效的方法,但是除非您在循环内进行大量串联,否则您不需要最有效的方法。
If you'd like to use
+
for concatenation of anything which has an output operator, you can provide a template version ofoperator+
:Then you can write your concatenations in a straightforward way:
Output:
This isn't the most efficient way, but you don't need the most efficient way unless you're doing a lot of concatenation inside a loop.
如果你使用MFC,你可以使用CString
Managed C++也有一个
字符串格式化程序。
If you are using MFC, you can use a CString
Managed C++ also has a
string formatter.
std::ostringstream 是一种很好的方法,但有时这个额外的技巧可能会很方便地将格式转换为单行:
现在您可以像这样格式化字符串:
The std::ostringstream is a good method, but sometimes this additional trick might get handy transforming the formatting to a one-liner:
Now you can format strings like this:
由于与 Qt 相关的问题已被关闭,因此有利于此问题,因此使用 Qt 执行此操作的方法如下:
字符串变量现在用 someIntVariable 的值代替 %1,并在末尾用 someOtherIntVariable 的值。
As a Qt-related question was closed in favour of this one, here's how to do it using Qt:
The string variable now has someIntVariable's value in place of %1 and someOtherIntVariable's value at the end.
有更多选项可用于连接整数(或其他数字对象)与字符串。 它是 Boost.Format
和来自 Boost.Spirit (v2)
Boost.Spirit Karma 声称是 整数到字符串转换的最快选项。
There are more options possible to use to concatenate integer (or other numerric object) with string. It is Boost.Format
and Karma from Boost.Spirit (v2)
Boost.Spirit Karma claims to be one of the fastest option for integer to string conversion.
以下是如何使用 IOStreams 库中的解析和格式化方面将 int 附加到字符串的实现。
Here is an implementation of how to append an int to a string using the parsing and formatting facets from the IOStreams library.
常见答案: itoa()
这很糟糕。
itoa
是非标准的,正如这里指出的< /a>.Common Answer: itoa()
This is bad.
itoa
is non-standard, as pointed out here.您可以使用下面给出的简单技巧将 int 连接到字符串,但请注意,这只在整数为个位数时才有效。 否则,将整数逐位添加到该字符串中。
You can concatenate int to string by using the given below simple trick, but note that this only works when integer is of single digit. Otherwise, add integer digit by digit to that string.
我写了一个函数,它以 int 数字作为参数,并将其转换为字符串文字。 此函数依赖于另一个将单个数字转换为其等效字符的函数:
There is a function I wrote, which takes the int number as the parameter, and convert it to a string literal. This function is dependent on another function that converts a single digit to its char equivalent:
在 C++ 20 中,您可以使用可变参数 lambda,在几行中将任意可流类型连接到字符串:
请参阅 https: //godbolt.org/z/dEe9h75eb
使用 move(os).str() 可以保证下次调用 lambda 时 ostringstream 对象的字符串缓冲区为空。
In C++ 20 you can have a variadic lambda that does concatenate arbitrary streamable types to a string in a few lines:
see https://godbolt.org/z/dEe9h75eb
using move(os).str() guarantees that the ostringstream object's stringbuffer is empty next time the lambda is called.
您可以像这样使用 C 函数
itoa()
:You can use the C function
itoa()
like this: