Mit C die Buchstabenanzahl von einem Satz zählen?

4 Antworten

Ist zwar nicht die Frage, aber mir fällt auf, dass das Array nicht richtig initialisiert wird.

int buchstaben[26] = {0};

Das initialisiert nur das erste Element mit 0, die anderen bleiben undefiniert. Für so etwas eignet sich die Bibliotheksfunktion memset:

int buchstaben[26];

memset(buchstaben, 0, 26 * sizeof(int));

Google einfach "C memset" für genaueres (und auch gleich "C memcpy"; kann man auch immer brauchen).

Zur Frage: du musst halt für jeden Buchstaben prüfen, ob es ein e ist, und nur dann den Zähler um 1 erhöhen. Statt einem Array brauchst du nur noch eine Variable als Zähler.

Woher ich das weiß:Hobby
Thomas416  01.07.2020, 19:26

Es ist noch ein Fehler im Code: um zu prüfen, ob c ein Buchstabe von 'a' bis 'z' ist, muss man schreiben:

if (c >= 'a' && c <= 'z')

also mit UND statt ODER.

0
Gehilfling  02.07.2020, 07:12
@Thomas416

Falsch. In C werden bei einer Initialisierungsliste alle nicht-gelisteten Elemente mit 0 aufgefüllt. Sprich, wenn du int array[10] = { 0 } setzt, werden die anderen 9 auch mit 0 belegt, obwohl nicht explizit genannt.

Wenn man auf etwas anderes als 0 initialisieren möchte, dann entweder eine komplette Liste oder über Memset (dann sind hald alle gleich).

2
Thomas416  02.07.2020, 13:56
@Gehilfling

Stimmt, zumindest im neuesten Standard wird eine Initialisierungsliste, falls vorhanden, mit Nullen ergänzt (bei ANSI-C war das noch nicht so, wenn ich mich nicht sehr irre). Wenn keine Initialisierungsliste gegeben ist, bleiben aber alle Elemente undefiniert (außer, das Array ist statisch).

Übrigens gibt es die Bibliotheksfunktionen isalpha, isalnum etc, um Zeichenklassen zu erkennen. Ist einfacher und weniger fehleranfällig als etwa

c <= 'z' && c >= 'a'

0
redeTaube  02.07.2020, 19:37
@Thomas416

Du irrst dich leider. Die Initialisierung von C funktioniert wie von Gehilfling genannt schon seit C89 und sogar davor, als es noch gar keinen offiziellen ANSI- / ISO-Standard gab.

Und uninitialisierte Arrays können auch Mülldaten enthalten, wenn sie statisch sind. Das hat mit dem Speicherort also nichts zu tun. :)

0

Du musst einfach nur die for schleife weg machen und statt dem i eine 4 schreiben

also sowas in der Art  

printf("Buchstabe %c kommt %d mal vor.\n", 4+'a', buchstaben[4] );

Wenn du schon Javascript Erfahrungen hast dann solltest das eigentlich klar sein wenn du dir den Code anschaust oder rumprobierst. Wenn du es ernst mit der Programmierung meinst dann solltest du sowas lieber selber machen, wenns nur eine nervige Hausaufgabe ist dann wird das wohl reichen.

LG

Schau dir mal an, was in deiner while-Schleife steht. Da sollte dir doch was auffallen, was und wie hier gezählt wird.

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems
limplex0 
Fragesteller
 01.07.2020, 16:51

Ich hab mit C leider noch überhaupt nicht gearbeitet. Ich hab Erfahrung mit JavaScript aber ich kann nicht genau sagen was ich hier alles umändern kann und was auch ein Platzhalter ist. Ich wäre wirklich dankbar wenn sich wer die Arbeit machen könnte und die while-Schleife kurz so editiert, das es passt.

0

if (c == 'e' || c == 'E') count++;

printf("E kommt %d mal vor",count);