Es gibt eine Reihe von Möglichkeiten, um die Häufigkeit der einzelnen Ziffern in einer Zahl zu bestimmen. Viele Male ist es genauso einfach, die Nummer im Format im Gegensatz zu einer Zahl selbst zu handhaben. Der Ansatz zur Bestimmung der Häufigkeit ist in jedem Fall identisch, also passen Sie Ihre Routine an die Art der Daten an, die Sie behandeln.
Das kurze Beispiel unten führt eine einfache Schleife unter Verwendung von mod
durch, um die Ziffern von jeder Zahl zu extrahieren, die an die ndigits()
-Funktion übergeben wurde. Da Sie sich nur mit der Häufigkeit der Ziffern befassen, gibt es keine Neuordnung der getrennten Zahlen, wie sie in einem typischen Umwandlung Prozess erforderlich wäre. Sie übergeben Ihr Null-initialisiertes Frequenzarray als einen Parameter an die Funktion und innerhalb der Funktion aktualisieren Sie einfach das Element, das jeder Ziffer entspricht, die angetroffen wird.Bei der Rückkehr enthält das Array die pro stelligen Frequenz für jede Ziffer in der Zahl als ‚n‘ übergeben:
#include <stdio.h>
#include <stdlib.h> /* for atoi */
#define NDIG 10 /* array size to hold frequency of digits (0-9) */
int ndigits (int n, int *a);
int main (int argc, char **argv) {
int a[NDIG] = {0}; /* initialize freq array to all 0 */
int n = argc > 1 ? atoi (argv[1]) : 347213, /* set number */
nd = ndigits (n, a); /* get number of digits/set freq */
printf (" the frequency of digits in '%d' (%d digits):\n\n", n, nd);
printf (" digits | frequency\n--------+---------\n");
for (int i = 0; i < NDIG; i++) /* output elements of freq array */
printf (" %6d | %2d\n", i, a[i]);
return 0;
}
/* record the frequency of digits in 'n' in array 'a' */
int ndigits (int n, int *a)
{
int d = 0;
for (; n; n /= 10, d++)
a[n % 10]++;
return d;
}
Beispiel Verwendung/Output
$ ./bin/freq_digits
the frequency of digits in '347213' (6 digits):
digits | frequency
--------+---------
0 | 0
1 | 1
2 | 1
3 | 2
4 | 1
5 | 0
6 | 0
7 | 1
8 | 0
9 | 0
es über suchen und lassen Sie mich wissen wenn Sie weitere Fragen haben.
Seit 'getchar()' liest aus 'stdin' und Sie haben bereits die' num', für die Sie Ziffer zählt wünschen, werde ich voran gehen und sagen 'getchar()' ist hier sinnlos. Dies ist eine Übung in Divisions- und Modulo-Operationen, wobei ein Zählerfeld von zehn Elementen beibehalten wird. – WhozCraig