-nick- Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 έστω ότι μια συνάρτηση δέχεται ως είσοδο εναν int π.χ τον 57321 πως μπορώ να πάρω τα ψηφία του και να αποθηκευτούν π.χ σε εναν char[] , (εννοείται χωρίς τη χρονοβόρα διαδικασία με τα div/mod κλπ)
Evgenios1 Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 Νομιζω οτι μπορεις να κανεις bit-shifting... δεν ειμαι σιγουρος, καθολου σιγουρος
ippo00 Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 http://en.wikipedia.org/wiki/Itoa Βέβαια άμα κοιτάξεις και το K&R implimentation που δίνει ως παράδειγμα, κάνει ακριβώς αυτό που λες ότι δεν θες να κάνεις... χρονοβόρο; γιατι; Πέρα από αυτό δεν μπορώ να σκεφτώ (και δεν νομίζω να υπάρχει) τρόπο με bit shifting που να είναι καύτερος (για το δεκαδικό σύστημα έστω) ---------- Το μήνυμα προστέθηκε στις 17:27 ---------- Εδώ http://www.jb.man.ac.uk/~slowe/cpp/itoa.html δίνει αυτό: > char* itoa(int val, int base){ static char buf[32] = {0}; int i = 30; for(; val && i ; --i, val /= base) buf[i] = "0123456789abcdef"[val % base]; return &buf[i+1]; } Αλλά ποιό κάτω λεεί ότι ο K&R τρόπος είναι γρηγορότερος στα benchmarks.
-nick- Δημοσ. 18 Απριλίου 2009 Μέλος Δημοσ. 18 Απριλίου 2009 ok.... Υπαρχει και ενας αλλος τροπος, που μετατρεπεις τον αριθμο σε string, και μετα απομονωνεις τον καθε χαρακτηρα-ψηφιο.. (μετα βεβαια για να το χρησιμοποιησεις σαν ιντ πρεπει να ξαναμετατρεψεις σε int)
Evgenios1 Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 nick[;2672687']ok.... Υπαρχει και ενας αλλος τροπος' date=' που [u']μετατρεπεις [/u]τον αριθμο σε string, και μετα απομονωνεις τον καθε χαρακτηρα-ψηφιο.. (μετα βεβαια για να το χρησιμοποιησεις σαν ιντ πρεπει να ξαναμετατρεψεις σε int) Δε σε καταλαβενω ... θελεις να το μετατρεψεις( το int ) σε 4 char, ή να το κανεις απλος ενα string πχ int = 1234567 και να γινει char[]="1234567"?
georgemarios Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 1. για ποια γλωσσα μιλαμε? java? 2. θες αν εχεις εναν αριθμο 123 να μτατραπει σε string "123"? αν ναι, τοτε >String myStr = ""+123; αν οχι, διευκρινησε λιγο παραπανω....
-nick- Δημοσ. 18 Απριλίου 2009 Μέλος Δημοσ. 18 Απριλίου 2009 μα το string είναι char[] ναι αυτό εννοώ. για C μιλάω. Θέλω να πάρω τα ψηφία ενός αριθμού (π.χ του 5219) σε εναν πινακα char οπου το πρωτο στοιχειο θα ειναι 5, το 2ο 2, το 3ο 1 , το 4ο το 9 ... σκεφτηκα οτι ενας τροπος για να γινει αυτο, περαν απο καποιους που βρηκα στο google βάζοντας seperate digits in C, θα ήταν να μετατρέψω τον αριθμό σε char[] , να παρω το καθε ψηφιο ως char κ να κανω μετατροπη σε Int.
Evgenios1 Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 >//test.c #include <stdio.h> //int i; int main ( void ) { int o=0; char str[10]; int i=-13424324; unsigned char c[4]; //σε 4 char c[3]=( char) ( (i<<(8*3)) >> (8*3) ); c[2]=( char) ( (i<<(8*2)) >> (8*3) ); c[1]=( char) ( (i<<(8*1)) >> (8*3) ); c[0]=( char) ( i>>(8*3)); printf("%d\n",i); printf("%s\n",c); i=0; i|= (int) c[3]; i|= ((int)c[2]<<(8*1)); i|= ((int)c[1]<<(8*2)); i|= ((int)c[0]<<(8*3)); printf("%d\n",i); //:P //σε τανγκα itoa(i, str, 10); printf("%s",str); getchar(); return 0; }
Directx Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 nick[;2672630']έστω ότι μια συνάρτηση δέχεται ως είσοδο εναν int π.χ τον 57321 πως μπορώ να πάρω τα ψηφία του και να αποθηκευτούν π.χ σε εναν char[] ' date=' (εννοείται χωρίς τη χρονοβόρα διαδικασία με τα div/mod κλπ)[/quote'] Αν θες να μετατρέψεις έναν αριθμό int στο ανάλογο char array σε ANSI-C (αυτό ζητάς από όσα διάβασα) μπορείς να δοκιμάσεις την sprintf η οποία λειτουργεί όπως η printf μόνο που η έξοδος της κατευθύνεται προς στο char* που επιθυμούμε (αφήνουμε την sprintf να κάνει όλη την βρώμικη δουλεία για εμάς –σε λογικά πλαίσια βέβαια). Για παράδειγμα: > /*-Int to String using C sprintf --------------------------------------------*/ #include <stdio.h> #include <string.h> int main(void) { int nNumber = 5219; char szNumber[bUFSIZ]; sprintf(szNumber, "%d", nNumber); printf("%s\n\n", szNumber); /* ή ακόμα πιο ξεκάθαρα.. */ for(nNumber = 0; nNumber < strlen(szNumber); nNumber++) printf("[%d] (or [%d]) = '%c'\n", nNumber, nNumber + 1, szNumber[nNumber]); printf("\nPress Enter to exit.."); getchar(); return 0; } Υ.Γ. Το BUFSIZ είναι συνήθως ένας μεγάλος αριθμός, δηλωμένος (#define) στο stdio.h και λογικά είναι αρκετός (ως τεράστιος ) για την δουλεία μας.
m1cRo Δημοσ. 18 Απριλίου 2009 Δημοσ. 18 Απριλίου 2009 nick[;2672630']έστω ότι μια συνάρτηση δέχεται ως είσοδο εναν int π.χ τον 57321 πως μπορώ να πάρω τα ψηφία του και να αποθηκευτούν π.χ σε εναν char[] ' date=' (εννοείται χωρίς τη χρονοβόρα διαδικασία με τα div/mod κλπ)[/quote'] http://msdn.microsoft.com/en-us/library/ms235327(VS.80).aspx
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.