我原以为这很简单,但它出现了一些困难。如果我有
std::string name = "John";
int age = 21;
我如何结合他们得到一个单一的字符串“John21”?
我原以为这很简单,但它出现了一些困难。如果我有
std::string name = "John";
int age = 21;
我如何结合他们得到一个单一的字符串“John21”?
当前回答
#include <iostream>
#include <sstream>
std::ostringstream o;
o << name << age;
std::cout << o.str();
其他回答
在c++ 20中,你可以有一个可变变量lambda,它可以在几行内将任意可流类型连接到字符串:
auto make_string=[os=std::ostringstream{}](auto&& ...p) mutable
{
(os << ... << std::forward<decltype(p)>(p) );
return std::move(os).str();
};
int main() {
std::cout << make_string("Hello world: ",4,2, " is ", 42.0);
}
参见https://godbolt.org/z/dEe9h75eb
使用move(os).str()可以保证下次调用lambda时ostringstream对象的stringbuffer为空。
#include <string>
#include <sstream>
using namespace std;
string concatenate(std::string const& name, int i)
{
stringstream s;
s << name << i;
return s.str();
}
作为一个与Qt相关的问题,下面是如何使用Qt:
QString string = QString("Some string %1 with an int somewhere").arg(someIntVariable);
string.append(someOtherIntVariable);
字符串变量现在有someIntVariable的值代替%1,someOtherIntVariable的值在结尾。
如果你使用MFC,你可以使用CString
CString nameAge = "";
nameAge.Format("%s%d", "John", 21);
托管c++也有一个 字符串格式化程序。
在c++ 20中,你可以做到:
auto result = std::format("{}{}", name, age);
与此同时,你可以使用{fmt}库,std::format基于:
auto result = fmt::format("{}{}", name, age);
声明:我是{fmt}库和c++ 20 std::格式的作者。