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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.