Ich dachte, das wäre ganz einfach, aber es gibt einige Schwierigkeiten. Wenn ich
std::string name = "John";
int age = 21;
Wie kombiniere ich sie, um eine einzige Zeichenfolge zu erhalten? "John21"
?
Ich dachte, das wäre ganz einfach, aber es gibt einige Schwierigkeiten. Wenn ich
std::string name = "John";
int age = 21;
Wie kombiniere ich sie, um eine einzige Zeichenfolge zu erhalten? "John21"
?
In alphabetischer Reihenfolge:
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);
#include <string>
)#include <sstream>
(aus dem Standard C++)Wenn Sie Boost haben, können Sie die Ganzzahl in eine Zeichenkette konvertieren, indem Sie boost::lexical_cast<std::string>(age)
.
Eine andere Möglichkeit ist die Verwendung von Stringstreams:
std::stringstream ss;
ss << age;
std::cout << name << ss.str() << std::endl;
Ein dritter Ansatz wäre die Verwendung von sprintf
o snprintf
aus der C-Bibliothek.
char buffer[128];
snprintf(buffer, sizeof(buffer), "%s%d", name.c_str(), age);
std::cout << buffer << std::endl;
Andere Poster schlugen die Verwendung von itoa
. Dies ist KEINE Standardfunktion, so dass Ihr Code nicht portabel ist, wenn Sie sie verwenden. Es gibt Compiler, die sie nicht unterstützen.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string itos(int i) // convert int to string
{
stringstream s;
s << i;
return s.str();
}
Schamlos gestohlen von http://www.research.att.com/~bs/bs_faq2.html .
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Herb Sutter hat einen guten Artikel zu diesem Thema: "Die Streichinstrumentenbauer von Manor Farm" . Er deckt
Boost::lexical_cast
,std::stringstream
,std::strstream
(die veraltet ist) undsprintf
vs.snprintf
.1 Stimmen
Lassen Sie mich dies noch ergänzen: Ich habe 'str = "hi"; str += 5; cout << str;' ausprobiert und keinen Effekt gesehen. Es stellte sich heraus, dass dies operator+=(char) aufruft und ein nicht druckbares Zeichen hinzufügt.