Zahl in Einer,Zehner, usw Stellen zerlegen

Gast #250774
Lesenswert?

Hallo zusammen!

Ich grübel zur Zeit an einer Funktion, die mir eine Integer-Zahl in die
einzelnen Dezimal-Stellen zerlegt. Also wenn ich z.B. 3426 übergebe,
soll mir die Funktion einzeln 3, 4, 2 und 6 zurück geben (evtl. in
einem Array). Die Funktion an sich ist mir nicht so wichtig, mich
interessiert vor allem der benätigte Algorithmus. Wahrscheinlich ist
das Problem trivial und schon tausend mal gelöst, aber ich komme
einfach nicht auf einen grünen Zweig.

Bin für alle Ideen/Vorschlöge dankbar!

Gruß
Daniel
Gast #250776
Lesenswert?

hmm das ward variante a die nur funzt wenn du die zahl kennst also
ruß.->tschuldigung.

besser geht das mit dem modulo opperator %  dieser führt eine
ganzahldivison aus und  gibt den rest als rückgabewert.
also

in c -syntax
....
x=3246;
a=x%10;
x=x/10;
b=x%10;
x=x/10;
.....

!! a wäre dann also 6, b wäre  also 4, ....
!!! und noch eines bei dieser variante zerlegst du dir dein x !

natürlich kann man das auch in ne schleife packen und dabei dann
jedesmal denn arrayindesx erhöhen.

Mischa
Gast #250778
Lesenswert?

So geht's auch
Beispiel bei 16 stelliger Zahl

int i=0;
int zahl_i = 1234567890123456;
char zahl_c[17];
snprintf(zahl_c, sizeof(zahl_c), "%d", zahl_i);

dann ist

zahl_c[0]=1
zahl_c[1]=2
zahl_c[2]=3
.... usw

strlen(zahl_c) gibt die Anzahl der Char Elemente in dem Array zurück
(bis zur Terminierung mit \0); in diesem Fall 16
Gast #250782
Lesenswert?

verdammt, warum vergess ich nur immer die Hälfte, ich glaube das "%d"
beim snprintf bewirkt dass die Int Zahl auch als solche im Char Array
steht. Habe gerade keine Entwicklungsumgebung  bzw Debugger hier um's
auszuprobieren, hab sowas aber schon öfter auf obige Weise gelöst.

-fs-
Gast #250784
Lesenswert?

oder so:
char *numstr (unsigned int v)
{
  static char t[10] = {0,0,0,0,0,0,0,0,0,0};
  char *p = t + 9;
  while(1)
  {
    unsigned int z = v/10;
    *p = '0' + (char)(v-(z<<3)-(z<<1));
    if (!z)
      break;
    v = z;
    p--;
  }
  return p;
}

aufrufen dann so:
char *p = numstr(12345);

in p[0] steht dann '1', in p[1] '2' usw. p[5] enthält eine 0 als
ende-kennung
#250788
Lesenswert?

> Gibt es auch so eine Funktion für float Werte ?

itoa =   int to alphanumeric
ftoa =   float to alphanumeric

... falls dein Compiler diese Funktionen überhaupt anbietet.
Beides sind nicht-standard Funktionen.

Ansonsten kannst Du immer sprintf benutzen. Das hat dann
auch den Vorteil, daß Du die Formatierung wesentlich besser
steuern kannst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren