La conversione da intero a matrice

Vorrei convertire un intero in un array, in modo che appaia simile al seguente:

int number = 123456 ;
int array[7] ;

con il risultato:

array[0] = 1 
array[1] = 2
...
array[6] = 6
  • può spiegare che cosa avete già provato voi stessi, e perché non ha funzionato?
  • E ‘ di compiti a casa, ma io a mordere. Mia moglie non capiva questo fino a quando ho spiegato a lei.
  • Qualcosa va storto nella vostra “…”. Ci sono 7 membri dell’array, ma solo 6 cifre decimali del numero.
InformationsquelleAutor kantor | 2009-12-07

 

11 Replies
  1. 25

    Forse una soluzione migliore è un passo indietro:

    123456 % 10 = 6

    123456 /10 = 12345

    12345 % 10 = 5

    12345 /10 = 1234

  2. 9

    basta usare l’aritmetica modulare:

    int array[6];
    int number = 123456;
    for (int i = 5; i >= 0; i--) {
        array[i] = number % 10;
        number /= 10;
    }
    • come su una risposta che, in realtà, spiega l’approccio così l’OP impara qualcosa?
    • Anche questo è hard-coded per affrontare con 6 cifre
    • Che funzionerà correttamente solo su 6 cifre numeri interi non negativi.
    • Volevo che l’OP a pensare su come estendere per la gestione di altri numeri, senza dare solo il caso generale.
  3. 5

    Qui quello che mi è venuto con il integerToArray funzione restituisce un vettore che viene convertito dal valore intero. puoi fare una prova con la funzione main:

    #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 
  4. 4

    È possibile estrarre l’ultima cifra del numero in questo modo:

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

    Di notare che si dovrebbe anche controllare se number è positivo. Altri valori richiedono un ulteriore trattamento.

  5. 2

    Prendere il log10 del numero per ottenere il numero di cifre. Metti che, per dire pos, quindi, in un ciclo, prendere il modulo di 10 (n % 10), mettere il risultato in un array alla posizione pos. Il decremento pos e dividere il numero per 10. Ripetere fino a quando pos == 0

    Cosa si vuole fare con il segno se è negativo?

  6. 0

    Il modo più semplice che posso immaginare ora è:

    char array[40];
    int number = 123456;
    
    memset(array, 0x00, sizeof(array));
    
    sprintf(array, "%d", number);

    Inoltre è possibile convertire ogni cifra per int semplicemente sottraendo il valore char da 0x30.

    MODIFICA: Se questo è un compito, l’insegnante si chiederà probabilmente scrivere un programma che utilizza operatore % anche se (esempio 12 % 10 = 2). Se questo è il caso, bene i compiti a casa 😉

    • che è un array di char, non una matrice di int
    • Se hai intenzione di usare sprintf, si prega di almeno usare snprintf
    • So che è un array di char, ma si può facilmente convertire in int sottraendo il valore char da 0x30, come ho osservato nella risposta. snprintf non C standard.
    • Se questo è il caso, naturalmente, il tuo è molto meglio!
    • snprintf è std C99, saranno inclusi in C++/1x ed è ora disponibile sulla maggior parte dei compilatori C++ come un’estensione comune
    • Ottimo, buono a sapersi @Phil. Ho detto perché ho provato ad usarlo in alcuni progetti in Unix, ma il compilatore che stiamo usando non ha avuto il supporto.

  7. 0

    È possibile utilizzare il modulo per determinare l’ultima cifra.

    E si può utilizzare divisione per spostare un’altra cifra per l’ultima cifra del luogo.

  8. 0

    Non si può semplicemente “conversione” di esso. L’intero non è rappresentato nel software in notazione decimale. Così le singole cifre che si desidera non esiste. Essi devono essere calcolate.

    Quindi, dato un numero arbitrario, come si può determinare il numero di quelli?

    Si potrebbero dividere per dieci, e poi prendere il resto: 123, la divisione dare 12, e poi c’è il resto di 3. Così abbiamo 3 quelli. Il 12 ci dice quello che abbiamo passato, quelli, in modo da può essere il nostro contributo per l’iterazione successiva. Prendiamo, dividere per 10, e 1, e un resto di 2. Così abbiamo 2 in decine luogo, e 1 a sinistra il lavoro di centinaia. Dividere per 10, che ci dà zero, e un resto di 1. Così otteniamo 1 in centinaia, 2 decine luogo, e 3 in quella posizione. E abbiamo finito, come l’ultima divisione restituito zero.

  9. 0

    se questo è veramente compiti a casa per poi mostrare il vostro insegnante – solo per divertimento 😉

    ATTENZIONE! performance molto scarsa, goffo modo da raggiungere l’effetto desiderato e, in genere, non fatelo a casa(lavoro) 😉

    #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" ) );
    }
  10. 0

    Se si voleva trasformarlo in una stringa e poi sarebbe davvero facile, basta fare quello che tutti gli altri dicono di utilizzare l’operatore%:

    Diciamo num = 123, siamo in grado di fare questo:

    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
    }

    Ora è possibile utilizzare str come un array di caratteri. Fare questo con un array è una seccatura perché mettere le cose in l’inizio di un array richiede di spostare tutto il resto. Quello che possiamo fare è, invece di mettere ogni cifra in una stringa, si può mettere in una pila. Sarà messo in ordine all’indietro come questo: 3 2 1. Quindi siamo in grado di pop off il numero superiore a uno a uno e metterlo in un array in ordine corretto. Si array sarà simile a questo: 1 2 3. Lascio l’attuazione di voi, poiché questo è il compito per casa.

    @Broam è una buona soluzione, ma come lui stesso ha dichiarato, è di lavorare a ritroso. Penso che l’OP o di chi viene in cerca in questo thread si desidera in avanti e questo è il motivo per cui sto postando questo. Se si dispone di una soluzione migliore, si prega di rispondere, sono interessato pure.

Lascia un commento