"Stellenzahl" erkennen und speichern (in var)
-
Hallo: gibt es eine Funktion die den wert der stellen einer Zahl speichert????
Beispiel:
int iZahl = 7634; int iStellen[30] = {0}; // Jetzt die Funktion /* wenn jetzt iStellen ausgegeben wird, müsste das so aussehen: iStellen[0] = 7; iStellen[1] = 6; iStellen[2] = 3; iStellen[3] = 4;
Weis einer die Funktion, oder wie man sowas selber machen könnte????
Michael
-
Hallo,
nutze den %-Operator, denn es gilt z.B.:
7634 % 1000 = 7
634 % 100 = 6
usw..., damit könnte man sich etwas basteln, oder umwandeln in char[] und die einzelnen Stellenwerte in int zurück wandeln, oder...
MfG,
Probe-Nutzer
-
ich denke sowas könnte man mit fgets() machen, und dann die zahlen einzeln auf andere strings kopieren..
mit sscanf() dann wieder in Zahlen umwandeln.
-
#include <stdlib.h> #include <stdio.h> #include <string.h> int main () { int a = 7634; char b[30]; sprintf(b, "%i", a); printf("val: %i bins: %i\n", a, strlen(b)); return 0; }
-
Probe-Nutzer schrieb:
Hallo,
nutze den %-Operator, denn es gilt z.B.:
7634 % 1000 = 7
634 % 100 = 6
wirklich? dachte der modulo schreibt den rst auf, also 7634 % 1000 = 634;
was du beschreibts ist glaube ich bei (int) (7634 / 1000) = 7..
aber bitte verbessert mich wenn ich falsch liege, bin mir aufeinmal auch nicht mehr sicher
-
Cool...danke für die antworten.....Wieso ich nicht selber drauf gekommen bin..^^
edit:+Und gibt es eine Funktion die die Länge ermittelt???
zb: 1357 = 4
-
Sorry, meinte natürlich den (Ganzzahl-)Divisions (/)-Operator. Die Länge durch Umwandlung in char[] und anschliessendes strlen.
MfG,
Probe-Nutzer
-
mmh, also ich mach sowas über strings und da gibt es mit string.h die funktion
strlen()
laenge = strlen(string)
oder du zählst selber mit ner forschleife und dann eben solange
string[i] != '\0'
-
CaPGeti schrieb:
Cool...danke für die antworten.....Wieso ich nicht selber drauf gekommen bin..^^
edit:+Und gibt es eine Funktion die die Länge ermittelt???
zb: 1357 = 4
Hast Du mal mein Code-Beispiel angesehen? Da steht alles drin.
-
#include <stdio.h> int main() { int num = 1234564; char buf [64]; int i, len; //************************ LÖSUNG MIT STANDARD FUNKTIONEN *************************** sprintf ( buf, "%d", num ); len = strlen ( buf ); for ( i=0; i<len; i++ ) printf ( "Wert: %d\n", buf [i] - 48 ); //************************ LÖSUNG MIT DEM MODULO OPERATOR ***************************** i = 1; while ( num / i ) { printf ( "Wert: %d\n", ( num / i ) % 10 ); i *= 10; } }
-
Oder so:
//************************ LÖSUNG MIT STANDARD FUNKTIONEN *************************** sprintf ( buf, "%d", num ); len = strlen ( buf ); for ( i=0; i<len; i++ ) printf ( "Wert: %c\n", buf [i]);
-
CaPGeti schrieb:
edit:+Und gibt es eine Funktion die die Länge ermittelt???
int digit_count( int n ) { int digits = 0; do { n /= 10; ++digits; } while (n != 0); return digits; }
-
Tachyon schrieb:
CaPGeti schrieb:
Cool...danke für die antworten.....Wieso ich nicht selber drauf gekommen bin..^^
edit:+Und gibt es eine Funktion die die Länge ermittelt???
zb: 1357 = 4
Hast Du mal mein Code-Beispiel angesehen? Da steht alles drin.
Ja klar....aber ich meinte eigentlich die Stellenanzahl der ZAHL vor der umwandlung...., damit ich nicht die länge der Zahl als parameter übergeben muss, wenn ich diese in einen String umwandeln will. Versteht ihr???
Edit: Sowas was gerade finix gepostet hat ^^
-
#include <math.h> #define digits(x) (1+(int)log10(x))
geht aber nicht mit 0
-
fricky schrieb:
#include <math.h> #define digits(x) (1+(int)log10(x))
is ja ekelhaft
-
vister schrieb:
is ja ekelhaft
ja, float-operationen sind meistens mist, aber auf 'nem PC mit coprozzi ist das okay so.