11 Stimmen

eine ganze Zahl in ein Array umwandeln

Ich versuche, eine Integer-Zahl in C in ein Array zu konvertieren, das alle Ziffern dieser Zahl enthält

d.h. wenn ich

int number = 5400

wie kann ich zu

int numberArray[4]

donde

numberArray[0] = 0;
numberArray[1] = 0;
numberArray[2] = 4;
numberArray[3] = 5;

Wir sind für jeden Vorschlag dankbar.

18voto

Zach Scrivena Punkte 28381

Tipp: Schauen Sie sich diese frühere Frage an " Summe der Ziffern in C# ". Es wird erklärt, wie man die Ziffern der Zahl mit verschiedenen Methoden extrahiert, von denen einige in C relevant sind.

Von Die Antwort von Greg Hewgill :

/* count number of digits */
int c = 0; /* digit position */
int n = number;

while (n != 0)
{
    n /= 10;
    c++;
}

int numberArray[c];

c = 0;    
n = number;

/* extract each digit */
while (n != 0)
{
    numberArray[c] = n % 10;
    n /= 10;
    c++;
}

0 Stimmen

Schlicht und einfach!

15voto

vava Punkte 23765

Dies würde für Zahlen >= 0 funktionieren

#include <math.h>

char * convertNumberIntoArray(unsigned int number) {
    int length = (int)floor(log10((float)number)) + 1;
    char * arr = new char[length];
    int i = 0;
    do {
        arr[i] = number % 10;
        number /= 10;
        i++;
    } while (number != 0);
    return arr;
}

EDIT: Nur ein bisschen mehr C-Stil, aber kryptischer.

#include <math.h>

char * convertNumberIntoArray(unsigned int number) {
    unsigned int length = (int)(log10((float)number)) + 1;
    char * arr = (char *) malloc(length * sizeof(char)), * curr = arr;
    do {
        *curr++ = number % 10;
        number /= 10;
    } while (number != 0);
    return arr;
}

0 Stimmen

Warum ist diese Funktion ein char-Zeiger? Und was macht new char[length]? Es sieht aus wie ein Zeiger auf den ersten Index des Arrays, aber mein Compiler scheint 'new char' nicht zu mögen

0 Stimmen

'new char' ist C++-Sprache. Die korrekte Vorgehensweise in C ist der zweite Teil des Codes.

0 Stimmen

Außerdem ist es wichtig, dass Sie am Ende Ihres Programms die Funktion free() auf das Array, das Sie von dieser Funktion zurückerhalten haben. Andernfalls verlieren Sie Speicher.

8voto

Christoffer Punkte 12396

Sie können die Anzahl der Ziffern einer ganzen Zahl mit dem Logarithmus berechnen, anstatt eine Schleife zu bilden. So,

int * toArray(int number)
{
    int n = log10(number) + 1;
    int i;
    int *numberArray = calloc(n, sizeof(int));
    for ( i = 0; i < n; ++i, number /= 10 )
    {
        numberArray[i] = number % 10;
    }
    return numberArray;
}

2voto

Dylan R Coss Punkte 41

Versuchen Sie dies,

void initialise_array(int *a, int size, int num) {
    for (int i = 0; i < size; ++i, num /= 10)
        a[(size - 1) - i] = num % 10;
}

2voto

Praveen Manupati Punkte 354
#include <stdio.h>
#include <string.h>

int main(void)
{
  int i, inputNumber;
  char* charArray;

  printf("\nEnter number: ");
  scanf("%d", &inputNumber);

  /* converts int to print buffer which is char array */
  sprintf(charArray, "%d", inputNumber); 
  int size = strlen(charArray);

  int intArray[size];

  for (i = 0; i < size; i++)
  {
    intArray[i] = charArray[i] - '0';
  }

  return 0;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X