1stellige Zahl zu 3 stellige zahl machen?


  • Mod

    Das liegt da dran, dass setw nur für die nächste Operation gilt. Oder genauer gesagt: Es ist zwar permanent, aber operator<< (der ohnehin die einzige (Standard-)Operation ist, die auf width reagiert) muss jedes Mal width wieder auf 0 setzen, wenn er fertig ist.

    Abhilfe, um trotzdem copy und Iteratoren nutzen zu können, wäre, ein eigener Wrapper um den Iterator, der bei jeder Operation width neu setzt. Gibt's, wie immer, schon in Boost:
    http://www.boost.org/doc/libs/1_39_0/libs/iterator/doc/function_output_iterator.html



  • #include <boost/function_output_iterator.hpp>
    --> Die resoucen können nicht geöffnet werden!!!

    gibt es einen andere Weg?



  • Stumpf ist Trumpf:

    void write_integer( ostream& os, int Value )
    {
       if( Value < 0 )
       {
          Value = -Value;
          os << "-";
       }
       if( Value < 10 )       os << "00" << Value;
       else if( Value < 100 ) os << "0" << Value;
       else                   os << Value;
    }
    

    *duck und weg* 😃


  • Mod

    MaximGast schrieb:

    #include <boost/function_output_iterator.hpp>
    --> Die resoucen können nicht geöffnet werden!!!

    gibt es einen andere Weg?

    Boost installieren?

    Oder

    SeppJ schrieb:

    Abhilfe, um trotzdem copy und Iteratoren nutzen zu können, wäre, ein eigener Wrapper um den Iterator, der bei jeder Operation width neu setzt.



  • @DocShoe noch einen blöde Frage:

    void TxtAusgabe_Gl26(vector<int> &v)
    {
    	string zielDatei = "c:\\Users\\test_ausgabe.txt";
    	//ios::fmtflags neuesFormat= ios::left|ios::oct;
    	ofstream datei(zielDatei,ios::app);
    	//ofstream datei(zielDatei.c_str(),ios::app);
    	if(!datei.is_open())
    	{
    		cerr << zielDatei << " Kann nicht geoeffnet werden!\n";
    		exit(-1);
    	}
    	//copy(v.begin(),v.end(),ostream_iterator<int>(datei,"   "));
    //--> Wie soll ich die write_integer aufrufen??
    	for(size_t i= 0;i<v.size();++i)
    		write_integer(datei,v.at(i));
    //<--
    	datei<<"\n";
    }
    

    sorry 😞



  • Genau so... was geht denn nicht?



  • ich bekomme diese Fehlermeldung:
    error C3861: 'write_integer': identifier not found


  • Mod

    DocShoe schrieb:

    Stumpf ist Trumpf:

    void write_integer( ostream& os, int Value )
    {
       if( Value < 0 )
       {
          Value = -Value;
          os << "-";
       }
       if( Value < 10 )       os << "00" << Value;
       else if( Value < 100 ) os << "0" << Value;
       else                   os << Value;
    }
    

    *duck und weg* 😃

    Nutz da doch wenigstens intern setw, damit man nicht so eingeschränkt ist und auch das Füllzeichen noch ändern kann. Außerdem schreit dies meiner Meinung nach nach einer Implementierung als Funktor/Lambda.

    @Threadersteller: Ich bin gerade etwas verwirrt. Wie viel C++ kannst du überhaupt? Einerseits kommst du mit algorithms und Iteratoren an, andererseits scheinst du nicht in der Lage zu sein, einfachste Programme zu schreiben. Nenn mal bitte deinen Kenntnisstand, dann kann man passendere Antworten geben.



  • @Stepp :Nutz da doch wenigstens intern setw, damit man nicht so eingeschränkt ist und auch das Füllzeichen noch ändern kann. Außerdem schreit dies meiner Meinung nach nach einer Implementierung als Funktor/Lambda

    Ehrlich gesagt verstehe ich nicht was du meinst?

    😞



  • Damit meinte er auch mich, und nicht dich. Du sollst uns jetzt erst ein mal erzählen, wieviel C++ du wirklich kannst.

    @SeppJ
    Funktor wäre nicht mehr ganz so stumpf gewesen...



  • Ich bin nocn anfänger....
    Ich habe nicht Erfahrungen


  • Mod

    MaximGast schrieb:

    Ich bin nocn anfänger....
    Ich habe nicht Erfahrungen

    Warum fummelst du dann so komisch Streamiteratoren rum? Abgeschrieben? (Fall ja: Schlechte Idee zum Lernen.)

    Wieso nicht einfach die ganze Funktion weglassen und stattdessen:

    for(size_t i = 0; i < dein_vector.size(); ++i)
      zielstream << setw(3) << setfill('0') << dein_vector[i] << " ";
    

    Zwei Zeilen und fertig. So macht man das, wenn man gerade mit C++ angefangen hat. (Und später eigentlich auch. Dieses ostream_iterator-Gefummel benutzt niemand ernsthaft, außer er will den großen Haxx0r markieren.)



  • Ich habe das jetzt:

    datei.fill('0');
    for(size_t i= 0;i<v.size();++i)
    {
     datei.width(3);
     datei<<v[i]<< "   ";
    }
    

    Jede hat klein angefangen
    aber danke an alle 🙂


  • Mod

    Sieht doch gleich viel besser aus. 😋 Und funktioniert nach Wunsch, nehme ich an?



  • jetzt möchte das Ostream Ausgabe in einem Pyramid form
    Wie mache ich das ?

    zb:

    111 333 444 555 777 888 123 453 456 001
    212 225 815 248 000 231 589 215 210
    121 210 230 213 231 218 215 218
    747 104 233 344 345 789 871
    785 102 201 854 124 215
    781 214 895 210 101
    456 890 123 545
    456 678 899
    345 678
    456



  • nein :
    in diesen form meine ich:
    102 222 542
    965 125
    102


  • Mod

    Setz Formatierungen in die Code-Tags, dann bleiben sie erhalten.

    Hast du denn einen Anstaz? Das klingt mir doch sehr nach Hausaufgabe.



  • Es ist keine Hausaufgabe.
    Ich mache nur für mich
    Ansatz habe ich :

    if(v.size()== 20)
    		{
    		 datei<< v[i] <<"   ";
    		}
    		if(v.size()== 21)
    		{
    		 datei<<"   "<<v[i];
    		}
    

    aber es klappt nicht
    warum ich mit v.size() == x1,x2...
    @ Die Vektoren haben unterschiedliche lange



  • Es hat alle geklappt wie es sein muss.
    So macht Programmierung spass
    Danke an alle 🙂


Anmelden zum Antworten