我原以为这很简单,但它出现了一些困难。如果我有
std::string name = "John";
int age = 21;
我如何结合他们得到一个单一的字符串“John21”?
我原以为这很简单,但它出现了一些困难。如果我有
std::string name = "John";
int age = 21;
我如何结合他们得到一个单一的字符串“John21”?
当前回答
下面是如何使用IOStreams库中的解析和格式化aspect将int附加到字符串的实现。
#include <iostream>
#include <locale>
#include <string>
template <class Facet>
struct erasable_facet : Facet
{
erasable_facet() : Facet(1) { }
~erasable_facet() { }
};
void append_int(std::string& s, int n)
{
erasable_facet<std::num_put<char,
std::back_insert_iterator<std::string>>> facet;
std::ios str(nullptr);
facet.put(std::back_inserter(s), str,
str.fill(), static_cast<unsigned long>(n));
}
int main()
{
std::string str = "ID: ";
int id = 123;
append_int(str, id);
std::cout << str; // ID: 123
}
其他回答
如果你使用MFC,你可以使用CString
CString nameAge = "";
nameAge.Format("%s%d", "John", 21);
托管c++也有一个 字符串格式化程序。
在我看来,最简单的答案是使用sprintf函数:
sprintf(outString,"%s%d",name,age);
作为一行:name += std::to_string(年龄);
std:: ostringstream
<sstream>#include std::ostringstream s; 与<<“约翰”<<年龄; std::string query(s.str());
std:: to_string (C + + 11)
std::string查询("John " + std::to_string(年龄));
boost:: lexical_cast
# include <刺激/ lexical_cast.hpp > std::string查询("John " + boost::lexical_cast<std::string>(age));
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string itos(int i) // convert int to string
{
stringstream s;
s << i;
return s.str();
}
无耻地从http://www.research.att.com/~bs/bs_faq2.html窃取。