int und string verbinden und in ein String herausgeben
-
#include <sstream>
RefDef.c_str() -> RefDef.str()
-
Also es hat funktioniert so wie dei Lösungsvorschläge waren.
Aber bei der Übergabe stand in dem String [null], was falsch ist.
mir ist aufgefallen, dass wenn ich .c_str() hinter prefix schreibe, dann wird in dem String prefix AND geschrieben, was stimmt!Aber wenn ich RefDef << prefix.c_str << suffix; schreibe, kriege ich den Fehler.
error C3867: 'std::basic_string<_Elem,_Traits,_Ax>::c_str': function call missing argument list; use '&std::basic_string<_Elem,_Traits,_Ax>::c_str' to create a pointer to member
with
[
_Elem=char,
_Traits=std::char_traits,
_Ax=std::allocator
]Code momentan
string prefix; int suffix; stringstream RefDef; prefix = m_pArrayPlistElem[i]->m_prefix; suffix = m_pArrayPlistElem[i]->m_suffix; RefDef << prefix.c_str << suffix; // std::string result = RefDef.str(); // fprintf(fp,"%s",prefix.c_str());Vielelicht als neben bei!
Ich muss den Code den unserer Prof . geschrieben hat ergänzen.
Der Prof. schweigt leider und lächelt!!
-
swunder schrieb:
... Ich muss den Code den unserer Prof . geschrieben hat ergänzen.
.. und wer hat Dir 'sprintf' und 'fprintf' beigebracht? War das der Prof? Dann gib' uns mal die FH/TU und den Namen. Wir müssen endlich mal was gegen diese Leute machen, die Heerscharen von Studenten in den C++-Kursen die veralteten C-Statements beibringen.
Einige hier zeigen nur noch reflexartige Reaktionen: z.B.:
theta schrieb:
Falsches Forum: Ansi C wäre korrekt.
Gruß
Werner
-
Werner Salomon schrieb:
.. und wer hat Dir 'sprintf' und 'fprintf' beigebracht? War das der Prof? Dann gib' uns mal die FH/TU und den Namen. Wir müssen endlich mal was gegen diese Leute machen, die Heerscharen von Studenten in den C++-Kursen die veralteten C-Statements beibringen.
Ja, total. Aber das wäre wahrscheinlich ziemlich aussichtslos, bei dem vielen existierenden "Halbwissen"...
Es gibt nebenbei massenhaft unbrauchbare C++-Bücher, die auch nicht gerade wenig zu schlechtem Programmierstil beitragen. Wenn man nicht in Foren wie diesem auf seinen Code aufmerksam gemacht wird, kann es gut sein, dass man unbehelligt so weiterprogrammiert, bis man sich vielleicht später im Beruf umgewöhnen muss. Schlimmer sieht es aus, wenn die Firma ebenfalls Wert auf veraltete und unübliche Techniken setzt.
Schlussendlich hat man sein Leben verbracht, ohne jemals erleuchtet worden zu sein.

-
habt Ihr vielleicht eine Lösung wie man es besser machen kann?
-
Ganz allgemein:
Statt print-Funktionen aus C zu neutzen sollte man C++-Streams benutzen:
#include <string> // std::string (Strings) #include <iostream> // std::cout, std::cin, std::cerr, ... (Standard-Ein-/Ausgabe) #include <fstream> // std::fstream, std::ifsream, std::ofstream,... (Datei-IO) #include <sstream> // std::stringstream ("Brücke zwischen Strings und Streams") int main(){ int zufahlszahl = 11; // reiner Zufall ;) // Begrüßung und Namen ermitteln: std::cout << "Hallo, bitte sagen Sie mir Ihren Namen: "; std::cout.flush(); std::string name; std::cin >> name; // personalisierte Glückszahlausgabe std::cout << "\nHallo " << name << "! Ihre Glückszahl ist heute die " << zufahlszahl << std::endl; // Dateiname erzeugen: int dateiIndex = 123; std::stringstream dateiName; dateiName << "Daten_" << dateiIndex << ".txt"; // Daten speichern (Name + Glückzahl in hex):: std::fstream logFile(dateiName.str().c_str(), std::ios::out | std::ios::app); logFile << "Benutername: " << name << " Glückszahl: " << std::hex << zufahlszahl << std::endl; return 0; }
-
Hallo Leute,
also ich habe jetzt auch mit dem Code probiert.
Aber mit diesem Code gebe ich nur ein string zusammen mit einem int in ein File.
Das ist ja nicht das Problem. Das habe ich geschaft.Aber wie schaffe ich es int und string in einen String zusammen zu fassen?
Das kann doch nicht so schwer sein!

Gruß Steve
-
swunder schrieb:
Aber wie schaffe ich es int und string in einen String zusammen zu fassen?
Was verstehst du denn unter "zusammenfassen", wenn dir keine der von Roger Wilco gezeigten Möglichkeiten zusagt? Tipp: Schau mal die Stelle mit
std::stringstreaman.
-
swunder schrieb:
Aber wie schaffe ich es int und string in einen String zusammen zu fassen?
Ich habs so geschafft:
#include <string> #include <sstream> int main() { std::string prefix; std::string RefDef1; int suffix; std::stringstream sstr; prefix = "Hallo"; suffix = 123; sstr << prefix << suffix; RefDef1 = sstr.str(); std::cout << "string version:" << RefDef1 << std::endl; RefDef1 = sstr.str().c_str(); std::cout << "char* version:" << RefDef1 << std::endl; std::cin.get(); return 0; }Oder ich versteh nicht genau, worum es hier geht...
Viel Glück noch, und ach ja, schau mal hier http://www.cplusplus.com/reference/iostream/stringstream/, die Seite solltest Du Dir auf jeden Fall in die Lesezeichen stecken

-
std::string + int = std::string:
rüdiger schrieb:
std::stringstream sstr; sstr << prefix << suffix; std::string result = sstr.str();prefix und suffix können dabei ein beliebiger Datentyp sein, für den der operator<< definiert ist (std::string, char*, int, long, float,...)
so auch:
std::string prefix = "Text"; int suffix = 1; std::stringstream sstr; sstr << prefix << suffix; std::string result = sstr.str(); // result == "Text1"
-
also es funktionier jetzt alles-
So wie ihr das vorgeschlgaen habt.
Bloss ich habe ein Problemstring prefix; int suffix; stringstream sstr; string RefDef[100]; int n=m_listComponent.size(); for(int i=0;i<n;i++){ prefix = m_pArrayPlistElem[i]->m_prefix; suffix = m_pArrayPlistElem[i]->m_suffix; sstr << prefix << suffix; RefDef[i] = sstr.str(); } for(int i=0;i<n;i++){ fprintf(fp,"%s\n",RefDef[i].c_str()); }Folgendes habe kriege ich in fp file
AND1
AND1IN1
AND1IN1IN2
AND1IN1IN2OR1
AND1IN1IN2OR1XOR1Erwartet habe ich aber
AND1
AND1
IN1
IN2
OR1
XOR1Was mache ich falsch? Oder muss ich immer die sstr Variable immer "löschen"?
Wenn ja wie mache ich es?
-
also es funktionier jetzt alles-
So wie ihr das vorgeschlgaen habt.
Bloss ich habe ein Problemstring prefix; int suffix; stringstream sstr; string RefDef[100]; int n=m_listComponent.size(); for(int i=0;i<n;i++){ prefix = m_pArrayPlistElem[i]->m_prefix; suffix = m_pArrayPlistElem[i]->m_suffix; sstr << prefix << suffix; RefDef[i] = sstr.str(); } for(int i=0;i<n;i++){ fprintf(fp,"%s\n",RefDef[i].c_str()); }Folgendes habe kriege ich in fp file
AND1
AND1IN1
AND1IN1IN2
AND1IN1IN2OR1
AND1IN1IN2OR1XOR1Erwartet habe ich aber
AND1
IN1
IN2
OR1
XOR1***Was mache ich falsch? Oder muss ich immer die sstr Variable immer "löschen"?
Wenn ja wie mache ich es?
-
sstr.str("");
-
Nexus schrieb:
sstr.str("");oder sstr erst in der schleife deklarieren.
// stringstream sstr; // string RefDef[100]; vector<string> RefDef; //#include <vector> int n=m_listComponent.size(); for(int i=0; i<n; i++){ string prefix = m_pArrayPlistElem[i]->m_prefix; int suffix = m_pArrayPlistElem[i]->m_suffix; stringstream sstr; sstr << prefix << suffix; // RefDef[i] = sstr.str(); RefDef.push_back(sstr.str()); } for(int i=0;i<n;i++){ // fprintf(fp,"%s\n",RefDef[i].c_str()); cout << RefDef[i] << endl; }also ohne den ganzen müll drin:
vector<string> RefDef; int n=m_listComponent.size(); for(int i=0; i<n; i++){ string prefix = m_pArrayPlistElem[i]->m_prefix; int suffix = m_pArrayPlistElem[i]->m_suffix; stringstream sstr; sstr << prefix << suffix; RefDef.push_back(sstr.str()); } for(int i=0;i<n;i++){ cout << RefDef[i] << endl; }das könnte(sollte) man jetzt noch in ein paar vielsagende Funktionen unterteilen...
falls du fragen zu vector hast, dann hier oder zur not kannste auch fragen
bb