#include #include #include #define NUM_DIGITS 10 int main(void) { char *strichlisten[NUM_DIGITS] = {NULL}; int counts[NUM_DIGITS] = {0}; int c; // Initialisiere alle Strichlisten als leere Strings for (int i = 0; i < NUM_DIGITS; ++i) { strichlisten[i] = malloc(1); if (!strichlisten[i]) { fprintf(stderr, "Speicherfehler!\n"); // Speicher aufräumen for (int j = 0; j < i; ++j) free(strichlisten[j]); return 1; } strichlisten[i][0] = '\0'; } // Einlesen der Ziffern while ((c = getchar()) != EOF) { if (c >= '0' && c <= '9') { int idx = c - '0'; counts[idx]++; // Länge des alten Strings size_t oldlen = strlen(strichlisten[idx]); // Speicher für neuen String (+1 für neuen Strich, +1 für '\0') char *neu = malloc(oldlen + 2); if (!neu) { fprintf(stderr, "Speicherfehler!\n"); // Speicher aufräumen for (int j = 0; j < NUM_DIGITS; ++j) free(strichlisten[j]); return 1; } strcpy(neu, strichlisten[idx]); neu[oldlen] = '|'; neu[oldlen+1] = '\0'; free(strichlisten[idx]); strichlisten[idx] = neu; } } // Ausgabe for (int i = 0; i < NUM_DIGITS; ++i) { printf("%d: %d %s\n", i, counts[i], strichlisten[i]); free(strichlisten[i]); } return 0; }