Archiv verlassen und diese Seite im Standarddesign anzeigen : c++: int an string anhängen
Hi!
Wie kann ich eine Zahl an einen String anhängen oder einfügen?
int counter = 0;
for-schleife {
counter++;
string filename = "file" + counter + ".txt";
...
So einfach funktioniert das leider nicht (weiss der Henker wieso...).
Danke schonmal. ;)
Neomi
2006-01-24, 21:42:54
char szFilename [32];
sprintf (szFileName, "file%04i.txt", counter);
http://www.cplusplus.com/ref/iostream/stringstream/stringstream.html
sowas? ,)
#include<sstream>
for-schleife {
counter++;
std::ostringstream oss;
oss << "file" << counter << ".txt";
string filename = oss.str();
Mit Boost (www.boost.org) (immer gut zu haben):
#include <boost/lexical_cast.hpp>
#include <string>
using namespace std;
using namespace boost;
const int zahl = 10;
string foo = "An mir hängt eine Zahl " + lexical_cast<string>(zahl);Ist übrigens nur ein Wrapper um den bereits angesprochene Stream.
Danke für die Antworten!
Aber gibt's in C++ keine "normale" Möglichkeit, eine Zahl an einen string zu hängen oder einzufügen? Nur die Umwege über diesen stream oder boost?!
Expandable
2006-01-25, 21:50:29
Was heißt "normal"? Ein Integer wird nun mal im Zweierkomplement gespeichert (falls signed), ein String als Array von Chars (*). Wie willst Du das verknüpfen? Eben, Du musst jede Stelle des Integers in den entsprechenden Char umwandeln. PHP z.B. macht das automatisch. C++ eben nicht. Über Vor- und Nachteile kann man sich streiten.
(*) Die genauen Details hängen allerdings davon ab, wie die STL implementiert wurde. Aber so kann man sich's vereinfacht vorstellen.
Aber gibt's in C++ keine "normale" Möglichkeit, eine Zahl an einen string zu hängen oder einzufügen?Ne. Das haben sie aus irgendwelchen Gründen weggelassen (und das C++ Komittee hat fast immer gute Gründe die sich zuerst nicht erschließen).
Expandable
2006-01-26, 11:50:31
Andererseits - es müsste ja möglich sein, den +-Operator zu überladen... und dann in der operator+-Funktion den sstream-Code ausführen. Dann hätte man ein PHP-ähnliches Verhalten simuliert und könnte schreiben myString + myInt... sowas, z.B.:
#include <iostream>
#include <sstream>
std::string operator+(const std::string& str, const int i)
{
std::ostringstream stream;
stream << str << i;
return stream.str();
}
std::string operator+(const int i, const std::string& str)
{
std::ostringstream stream;
stream << i << str;
return stream.str();
}
int main()
{
std::string myString = "String mit angehängtem Integer: ";
int myInt = 33;
myString = myInt + std::string(" ") + myString + myInt;
std::cout << myString;
return 0;
}
Ausgabe ist, wie zu erwarten, "33 String mit angehägtem Integer: 33"
ScottManDeath
2006-01-26, 12:08:34
Ne. Das haben sie aus irgendwelchen Gründen weggelassen (und das C++ Komittee hat fast immer gute Gründe die sich zuerst nicht erschließen).
lexical_cast ist Teil des kommenden C++0x Standard, AFAIK auch schon im TR1 oder TR2 enthalten.
Kann man dann den lexical_cast operator überladen?
lexical_cast ist Teil des kommenden C++0x Standard, AFAIK auch schon im TR1 oder TR2 enthalten.Dachte ich mir schon.
Kann man dann den lexical_cast operator überladen?Cast-Operatoren konnte man noch nie überladen und lexical_cast ist auch kein Operator.
Du kannst deinen Objekten einfach entsprechende Stream-Funktionen verpassen dann funktioniert lexical_cast.
Ich bin doch net dumm das hat sich so angehört als ob es ein op werden soll und nicht nur ne template funktion...
Evtl. wird es das ja, aber ich kann mirs beim besten Willen nicht vorstellen. Das würde nur Aufwand ohne Gewinn bedeuten.
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.