halo
This commit is contained in:
parent
97d3228fcf
commit
2b748acdf5
51
strilist.c
51
strilist.c
@ -2,54 +2,55 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define NUM_DIGITS 10
|
||||
#define NUM_DIGITS 10 // Es gibt 10 Ziffern: 0 bis 9
|
||||
|
||||
int main(void) {
|
||||
char *strichlisten[NUM_DIGITS] = {NULL};
|
||||
int counts[NUM_DIGITS] = {0};
|
||||
int c;
|
||||
char *strichlisten[NUM_DIGITS] = {NULL}; // Array für die Strichlisten-Strings, einer pro Ziffer
|
||||
int counts[NUM_DIGITS] = {0}; // Zählt, wie oft jede Ziffer vorkommt
|
||||
int c; // Variable für das aktuell eingelesene Zeichen
|
||||
|
||||
// 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
|
||||
strichlisten[i] = malloc(1); // Reserviere 1 Byte für den leeren String ('\0')
|
||||
if (!strichlisten[i]) { // Prüfe, ob Speicher reserviert werden konnte
|
||||
fprintf(stderr, "Speicherfehler!\n"); // Fehlermeldung ausgeben
|
||||
// Bereits reservierten Speicher wieder freigeben
|
||||
for (int j = 0; j < i; ++j) free(strichlisten[j]);
|
||||
return 1;
|
||||
return 1; // Programm mit Fehlercode beenden
|
||||
}
|
||||
strichlisten[i][0] = '\0';
|
||||
strichlisten[i][0] = '\0'; // Setze den String auf leer (nur das Endzeichen)
|
||||
}
|
||||
|
||||
// Einlesen der Ziffern
|
||||
// Lese Zeichen ein, bis das Dateiende (EOF) erreicht ist
|
||||
while ((c = getchar()) != EOF) {
|
||||
if (c >= '0' && c <= '9') {
|
||||
int idx = c - '0';
|
||||
counts[idx]++;
|
||||
if (c >= '0' && c <= '9') { // Prüfe, ob das Zeichen eine Ziffer ist
|
||||
int idx = c - '0'; // Rechne das Zeichen in eine Zahl um (z.B. '3' -> 3)
|
||||
counts[idx]++; // Zähle die Ziffer mit
|
||||
|
||||
// Länge des alten Strings
|
||||
// Ermittle die Länge des bisherigen Strichlisten-Strings
|
||||
size_t oldlen = strlen(strichlisten[idx]);
|
||||
// Speicher für neuen String (+1 für neuen Strich, +1 für '\0')
|
||||
// Reserviere neuen Speicher: alter String + 1 Strich + 1 für '\0'
|
||||
char *neu = malloc(oldlen + 2);
|
||||
if (!neu) {
|
||||
if (!neu) { // Prüfe, ob Speicher reserviert werden konnte
|
||||
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;
|
||||
strcpy(neu, strichlisten[idx]); // Kopiere den alten String in den neuen Speicher
|
||||
neu[oldlen] = '|'; // Füge einen Strich ans Ende an
|
||||
neu[oldlen+1] = '\0'; // Setze das String-Ende
|
||||
free(strichlisten[idx]); // Gib den alten Speicher frei
|
||||
strichlisten[idx] = neu; // Setze den neuen String als aktuelle Strichliste
|
||||
}
|
||||
// Alle anderen Zeichen werden ignoriert
|
||||
}
|
||||
|
||||
// Ausgabe
|
||||
// Gib für jede Ziffer die Anzahl und die Strichliste aus
|
||||
for (int i = 0; i < NUM_DIGITS; ++i) {
|
||||
printf("%d: %d %s\n", i, counts[i], strichlisten[i]);
|
||||
free(strichlisten[i]);
|
||||
free(strichlisten[i]); // Speicher für die Strichliste freigeben
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0; // Programm erfolgreich beenden
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user