Zahlen Auseinandernehmen Z. B: [X=83749] -> [a=8, b=3, c=7, d=4, e=9] ??????



  • 83749 % 10 = 9
    83749 / 10 % 10 = 4
    83749 / 100 % 10 = 7
    83749 / 1000 % 10 = 3
    83749 / 10000 % 10 = 8



  • ich würde diese Arbeit durch die Standardbibliothek erledigen lassen

    Pseudocode:

    int zahl = 83749;
    stringstream str;
    str<<zahl;
    cout<<str[0]<<endl; // gibt 8 aus
    


  • Vertexwahn schrieb:

    ich würde diese Arbeit durch die Standardbibliothek erledigen lassen

    Pseudocode:

    int zahl = 83749;
    stringstream str;
    str<<zahl;
    cout<<str[0]<<endl; // gibt 8 aus
    

    Naja, fast.

    int zahl = 83749;
    stringstream strstr;
    strstr<<zahl;
    string str;
    strstr >> str;
    cout<<str[0]<<endl; // gibt 8 aus
    


  • cout<<str.str()[0]<<endl; // gibt 8 aus
    


  • Vertexwahn schrieb:

    ich würde diese Arbeit durch die Standardbibliothek erledigen lassen

    Pseudocode:

    int zahl = 83749;
    stringstream str;
    str<<zahl;
    cout<<str[0]<<endl; // gibt 8 aus
    

    Über strings würde ich aus auf keinen Fall machen!
    Du als Europäer bis vielleicht gewöhnt dass es nur unsere Zahlen gibt! Da hast Du sich aber getäuscht... und falls das Programm je mal unter einer anderen Locale läuft, hast Du ein massives Problem...
    Und mathemetische aufgaben sollte man auch als solche Lösen und nicht "rummurksen"...



  • Hem, wo werden denn Zahlen anders behandelt als bei den europäern? Mal ganz davon abgesehen, das es arabische Schreibweise ist, die man hier in Europa und wohl den Rest der Welt benutzt.



  • Die "arabische Schreibweise" wird aber nicht in Arabien benützt (keine Ahnung warum unsere Zahlen so heissen)...
    Du hast Dich vermutlich noch nie mit Lokalisierung beschäftigt...
    Hättest Du in Deinem XP die Arabischen Sprachen installiert, dann könntest Du z.B. die Zahlendarstellung auswählen, und da bietet Windows XP mindestens 5 verschiendene an (neben den Dir bekannten).

    Allein im Unicode sind 270 verschienden Zeichen für 0-9 definiert:
    http://www.fileformat.info/info/unicode/category/Nd/list.htm
    Die Arabische 3 ist z.B.:
    http://www.fileformat.info/info/unicode/char/0663/index.htm

    Aber ganz abgesehen davon löst man Mathematische Aufgaben korrekt und nicht über Strings!



  • Und mathemetische aufgaben sollte man auch als solche Lösen und nicht "rummurksen"...

    Hab mir gedacht, das stringstream das intern genau so lösen wird. Aber wenn wirklich die Gefahr besteht, dann ist es natürlich sinnvoll es selber zu lösen - aber vielleicht ist ja genau dieses Verhalten gewünscht



  • Gut das ich direckt die erste Antwort genommen habe...

    x5 = GebDatum / 10000 % 10;
    x6 = GebDatum / 1000 % 10;
    x7 = GebDatum / 100 % 10;
    x8 = GebDatum / 10 % 10;
    x9 = GebDatum % 10;
    

    Damit ihr auch wisst warum ich das gebraucht habe, ich baue mit gerade selber einen Personalwausweis ID Gernerator/Dekodierer... Und da muss ich die Ziffern einzeln verwenden können um z. B. die Prüffsumme ausrechnen zu können.

    Danke nochmal...

    und ja, ich weis... von den dingern gibt es einige... aber nur wer selber ein Heusle baut weis wo er Später in der Wand bohren kann...



  • Seid ihr euch sicher, dass der wstringstream das beim umwandeln nicht beachtet?



  • #include <iostream>
    #include <iterator>
    #include <deque>
    using namespace std;
    
    typedef deque<unsigned char> bytes;
    
    template<typename TContainer>
    inline void makeDigits(TContainer &output, int number)
    {
    	for(; number>0; number/=10)
    		output.push_front(number%10);
    }
    
    int main()
    {
    	bytes test;
    	makeDigits(test, 5432652);
    	copy(test.begin(), test.end(), ostream_iterator<int>(cout, "\n"));
    	cin.get();
    }
    

Anmelden zum Antworten