web-dev-qa-db-fra.com

Convertir un entier en tableau

Je voudrais convertir un entier en tableau, pour qu'il ressemble à ceci:

int number = 123456 ;
int array[7] ;

avec le résultat:

array[0] = 1 
array[1] = 2
...
array[6] = 6
13
kantor

Une meilleure solution est peut-être de travailler à l'envers:

123456 % 10 = 6

123456 / 10 = 12345

12345 % 10 = 5

12345 / 10 = 1234

23
Broam

il suffit d'utiliser l'arithmétique modulaire:

int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
    array[i] = number % 10;
    number /= 10;
}
9
user224003

Ici, la fonction integerToArray retourne un vecteur qui est converti à partir de la valeur entière. vous pouvez aussi le tester avec la fonction principale:

#include <iostream>
#include <vector>
using namespace std;

vector <int> integerToArray(int x)
{
    vector <int> resultArray;
    while (true)
    {
    resultArray.insert(resultArray.begin(), x%10);
    x /= 10;
    if(x == 0)
        return resultArray;
    }
}

int main()
{
    vector <int> temp = integerToArray(1234567);
    for (auto const &element : temp)
        cout << element << " " ;
    return 0;
}

//outputs 1 2 3 4 5 6 7 
5
Orhun Yeldan

Vous pouvez extraire le dernier chiffre du nombre de cette façon:

int digit = number % 10;
number /= 10;

Notez que vous devriez également vérifier si number est positif. Les autres valeurs nécessitent une manipulation supplémentaire.

4
avakar

Prenez le log10 du numéro pour obtenir le nombre de chiffres. Mettez cela dans, disons pos, puis, dans une boucle, prenons le modulo de 10 (n % 10), mettons le résultat dans le tableau à la position pos. Décrivez pos et divisez le nombre par 10. Répétez cette opération jusqu'au pos == 0

Que vouliez-vous faire avec le signe s'il est négatif?

2
philsquared

Si vous vouliez en faire une chaîne, ce serait très simple. Faites ce que tout le monde dit à propos de l'opérateur%:

Disons num = 123, nous pouvons faire ceci:

string str;
while (num > 0)
{
   str = (num % 10) + str;  //put last digit and put it into the beginning of the string
   num = num /10;  //strip out the last digit
}

Maintenant, vous pouvez utiliser str comme un tableau de caractères. Faire cela avec un tableau est une tâche fastidieuse, car placer des éléments au début d'un tableau nécessite de tout changer. Ce que nous pouvons faire, c'est que, au lieu de mettre chaque chiffre dans une chaîne, nous pouvons le mettre dans une pile. Il la mettra dans un ordre inverse comme celui-ci: 3 2 1. Ensuite, nous pouvons extraire le numéro le plus haut un par un et le placer dans un tableau dans le bon ordre. Votre tableau ressemblera à ceci: 1 2 3. Je vous laisserai la mise en œuvre car il s’agit d’un devoir.

@Broam a une bonne solution, mais comme il l'a dit, c'est pour le travail en arrière. Je pense que l'OP ou celui qui cherche dans ce fil voudra le transmettre et c'est pourquoi je poste ceci. Si vous avez une meilleure solution, répondez-moi, je suis aussi intéressé.

0
smokenstein

Voir SO question Démo linguistique: convertir une chaîne de chiffres en tableau d'entiers? pour une version C/C++ (ainsi que d'autres langages).

0
Peter Olsson

Le moyen le plus simple que je puisse imaginer maintenant est:

char array[40];
int number = 123456;

memset(array, 0x00, sizeof(array));

sprintf(array, "%d", number);

De plus, vous pouvez convertir chaque chiffre en entier en soustrayant simplement la valeur de caractère par 0x30.

EDIT: S'il s'agit d'un devoir, votre enseignant vous demandera probablement d'écrire le programme avec l'opérateur% (exemple: 12% 10 = 2). Si c'est le cas, bons devoirs ;-)

0
Andres

Vous pouvez utiliser le module pour déterminer le dernier chiffre.

Et vous pouvez utiliser la division pour déplacer un autre chiffre à la place du dernier chiffre.

0
Drew Dormann

si c’est vraiment un devoir, montrez-le à votre professeur, juste pour le plaisir ;-) 

MISE EN GARDE! performance très médiocre, manière maladroite d’atteindre l’effet escompté et généralement pas à la maison (travail) ;-)

#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

typedef std::vector< int > ints_t;

struct digit2int
{
    int operator()( const char chr ) const
    {
        const int result = chr - '0';
        return result;
    }
};

void foo( const int number, ints_t* result )
{
    std::ostringstream os;
    os << number;
    const std::string& numberStr = os.str();
    std::transform(
        numberStr.begin(),
        numberStr.end(),
        std::back_inserter( *result ),
        digit2int() );
}

int main()
{
    ints_t array;
    foo( 123456, &array );
    std::copy(
        array.begin(),
        array.end(),
        std::ostream_iterator< int >( std::cout, "\n" ) );
}
0
Dominic.wig

Vous ne pouvez pas simplement le "convertir". L'entier n'est pas représenté dans le logiciel en notation décimale. Donc, les chiffres individuels que vous voulez ne pas existent. Ils doivent être calculés.

Alors, étant donné un nombre arbitraire, comment pouvez-vous déterminer le nombre d'unités?

Nous pourrions diviser par dix, puis prendre le reste: pour 123, la division donnerait 12, puis il restera 3. Nous avons donc 3 unités. Le 12 nous dit ce que nous avons passé, alors cela peut être notre contribution pour la prochaine itération. Nous prenons cela, divisons par 10 et obtenons 1, et un reste de 2. Nous en avons donc 2 dans la position des dizaines, et il en reste 1 avec laquelle travailler pour des centaines. Divisez cela par 10, ce qui nous donne zéro et un reste de 1. Nous obtenons donc 1 à la place des centaines, 2 à la place des dizaines et 3 à la place des unités. Et nous avons terminé, puisque la dernière division a retourné zéro.

0
jalf