hilfe bei funktion...
-
folgende funktion funktioniert wunderbar mit ganzzahlen, aber bei vorhandensein eines kommas ('.') werden die jeweils letzten stellen des vectors/arrays gelöscht warum
vector<char> zahl_char(long double zahl) { strstream lengthChecker; lengthChecker << zahl ;//<< '\0'; // Nullterminierung ist wichtig string zahlStr = lengthChecker.str(); char temp_vec_char[zahlStr.length()]; vector<char> vec_char; gcvt( zahl, zahlStr.length(), temp_vec_char ); for(int x = 0; x <= zahlStr.length(); x++) { if(temp_vec_char[x] >= '0' && temp_vec_char[x] <= '9' || temp_vec_char[x] == '-' || temp_vec_char[x] == '.') vec_char.push_back(temp_vec_char[x]); } return vec_char; }
for(int y = zahl_char(-123456789).size()-1; y >= 0; y--) { //fehler in zahl_char!!! wegen defekt bei fließkommazahlen... cout<<zahl_char(-123456789)[y]<<endl; }
liefert korrekt:-123456789
bei: 1.23456789 nur noch 1.2345678
und bei -1.23456789 nur noch -1.234567ich habe mir zugegebenermaßen
strstream lengthChecker; lengthChecker << zahl ;//<< '\0'; // Nullterminierung ist wichtig string zahlStr = lengthChecker.str();
code kopiert, was macht dieser eigentlich?
vielleicht komm ich ja so auf den fehler.mfg
-
dgrat schrieb:
...ich habe mir zugegebenermaßen
strstream lengthChecker; lengthChecker << zahl ;//<< '\0'; // Nullterminierung ist wichtig string zahlStr = lengthChecker.str();
code kopiert, was macht dieser eigentlich?...
er wandelt deine zahl vom typ 'long double' in einen 'string' um
-
das weiß ich auch!
-
dgrat schrieb:
das weiß ich auch!
warum fragst du dann?
-
lengthChecker.width(15); lengthChecker << zahl;
-
bekomm einen syntaxfehler bei...
strstream lengthChecker.width(15); lengthChecker << zahl ;
wegen '.'???
danke für die antwortendgrat schrieb:
das weiß ich auch!warum fragst du dann?
anders was ist ein strstream?
-
dgrat schrieb:
bekomm einen syntaxfehler bei...
strstream lengthChecker.width(15);
Das habe ich auch nicht geschrieben.
-
warum funktioniert das was ich gemacht habe nicht bei der deklarierung?
-
Warum sollte es funktionieren? Du kannst, wenn du ein Objekt erzeugst, nicht in derselben Anweisung eine Methode des Objekts aufrufen.
-
das wort heißt übrigens deklaration, nicht deklarierung und ist in dem fall sogar eine definition.
du solltest außerdem lieber stringstream und nicht strstream verwenden.#include <sstream> //... std::stringstream foo; foo << zahl; std::string str = stringstream.str();
einmal oberflächlich. da die funktion aber offensichtlich was ganz anderes macht, könntest du dir auch überlegen, anders vorzugehen. vielleicht schaut sich das ja jemand genauer an.