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.234567 😕

    ich 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 antworten

    dgrat 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.


Anmelden zum Antworten