Προς το περιεχόμενο

Απομώνωση ψηφίων ενός αριθμού σε C


-nick-

Προτεινόμενες αναρτήσεις

Δημοσ.

έστω ότι μια συνάρτηση δέχεται ως είσοδο εναν int π.χ τον 57321

 

πως μπορώ να πάρω τα ψηφία του και να αποθηκευτούν π.χ σε εναν char[] , (εννοείται χωρίς τη χρονοβόρα διαδικασία με τα div/mod κλπ)

Δημοσ.

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.

Δημοσ.

ok....

Υπαρχει και ενας αλλος τροπος, που μετατρεπεις τον αριθμο σε string, και μετα απομονωνεις τον καθε χαρακτηρα-ψηφιο.. (μετα βεβαια για να το χρησιμοποιησεις σαν ιντ πρεπει να ξαναμετατρεψεις σε int)

Δημοσ.
nick[;2672687']ok....

Υπαρχει και ενας αλλος τροπος' date=' που [u']μετατρεπεις [/u]τον αριθμο σε string, και μετα απομονωνεις τον καθε χαρακτηρα-ψηφιο.. (μετα βεβαια για να το χρησιμοποιησεις σαν ιντ πρεπει να ξαναμετατρεψεις σε int)

Δε σε καταλαβενω ... θελεις να το μετατρεψεις( το int ) σε 4 char, ή να το κανεις απλος ενα string πχ int = 1234567 και να γινει char[]="1234567"?

Δημοσ.

1. για ποια γλωσσα μιλαμε? java?

2. θες αν εχεις εναν αριθμο 123 να μτατραπει σε string "123"?

 

αν ναι, τοτε

>String myStr = ""+123;

αν οχι, διευκρινησε λιγο παραπανω....

Δημοσ.
μα το string είναι char[]

 

ναι αυτό εννοώ.

 

για C μιλάω. Θέλω να πάρω τα ψηφία ενός αριθμού (π.χ του 5219) σε εναν πινακα char οπου το πρωτο στοιχειο θα ειναι 5, το 2ο 2, το 3ο 1 , το 4ο το 9 ...

 

σκεφτηκα οτι ενας τροπος για να γινει αυτο, περαν απο καποιους που βρηκα στο google βάζοντας seperate digits in C, θα ήταν να μετατρέψω τον αριθμό σε char[] , να παρω το καθε ψηφιο ως char κ να κανω μετατροπη σε Int.

Δημοσ.

 

 

>//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;
}

 

 

 

Δημοσ.
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 και λογικά είναι αρκετός (ως τεράστιος :-D) για την δουλεία μας.

Δημοσ.
nick[;2672630']έστω ότι μια συνάρτηση δέχεται ως είσοδο εναν int π.χ τον 57321

 

πως μπορώ να πάρω τα ψηφία του και να αποθηκευτούν π.χ σε εναν char[] ' date=' (εννοείται χωρίς τη χρονοβόρα διαδικασία με τα div/mod κλπ)[/quote']

 

http://msdn.microsoft.com/en-us/library/ms235327(VS.80).aspx

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...