C - Anzahl Zeichen aus einer Datei
So, ich möchte ein Programm, welches zählt die vorkommen der einzelnen Zeichen in einer Datei. Zum Beispiel:
4 Instanzen von Zeichen 0x67 (g)
11 Instanzen von Zeichen 0x68 (h)
und so weiter
Ich bin nicht sicher, wie Sie Sie anzeigen und zählen-Instanzen.
Irgendwelche Gedanken?
#include <stdio.h>
const char FILE_NAME[] = "input.txt";
#include <stdlib.h>
int main() {
int count = 0; /* number of characters seen */
FILE *in_file; /* input file */
/* character or EOF flag from input */
int ch;
in_file = fopen(FILE_NAME, "r");
if (in_file == NULL) {
printf("Cannot open %s\n", FILE_NAME);
exit(8);
}
while (1) {
ch = fgetc(in_file);
if (ch == EOF)
break;
++count;
}
printf("Number of characters in %s is %d\n",
FILE_NAME, count);
fclose(in_file);
return (0);
- Haben Sie mindestens gearbeitet, wie Sie gehen, um zu verfolgen zählt von jedem Charakter?
- Naja, ich glaube, ich brauche ein array und Ausgabe nur die nicht-null-Ganzzahlen am Ende. Aber...sollte ich 2 arrays? Eine für alle-Zeichen (256) und eine für die Vorkommnisse und synchronisieren Sie Sie irgendwie so, dass array1[0] = array2[0]?
- Tipp: Was würde passieren, wenn Sie könnte das Zeichen als index?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was ich kam mit...
Ich den code zu kompilieren mit folgendem Befehl (GCC 4.8.1 unter OS X 10.7.4)
es compiliert ohne Warnungen und keine Fehler; das ist die Ausgabe:
müssen Sie die Verwendung von array, check-out:
int charArray[256] = {0};
auch arbeiten zu initialisieren, werden die Werte auf 0?int array[200] = {0};
ist, dann alle - Elemente werden initialisiert auf 0. C erfordert lediglich mindestens ein Wert in den geschweiften Klammern. C++ erlaubt die leeren Klammern.memset
wäre nutzlos in dieser situation.Wenn Sie abrufen möchten, zählt der alphabet-Zeichen, dann könnte es so Aussehen:
drucken Sie Sie aus, könnte einfach sein wie:
Einem einfachen Programm, das ich gefunden hier . Es dauert zwei-Eingang, ersten das Zeichen, das Sie wollen, zu zählen und den Namen der Datei, in der das auftreten der Zeichen gezählt werden muss.
Könnten Sie verwenden ein array von 256 Ganzzahlen (auf vielen Plattformen
char
ist ein 8-bit-Wert). Da die Anzahl der Zeichen angezeigt wird, in eine Datei, die nicht negativ sein kann, ein Datentyp ohne Vorzeichen Sinn macht.Jeden Steckplatz im array stellt die Anzahl der Zeiten, die der Charakter mit sich, dass der Wert erscheint in der Datei.
Beim drucken Sie Sie aus, einige Zeichen werden nicht gedruckt oder sind Leerzeichen (dies gilt insbesondere, wenn Sie beim Lesen einer Binär-Datei), können Sie die
isprint
undisspace
Funktionen, die in derctype.h
header.eine alte Funktion, die ich vor einiger Zeit geschrieben.. hoffe das hilft 😉
mehr info hier: http://en.cppreference.com/w/c/string/byte/strchr