Anzahl des Buchstabens 'e' zählen
-
Hallo
Ich habe eine Aufgabe, bei der ich die Anzahl des Buchstabens 'e' in einem Wort zählen soll. Dieses Wort soll vom Nutzer eingegeben werden.
Wir sollen dazu Arrays und Zeiger benutzen..
Da ich wegen meiner Weißheitszahn-OP in den Unterrichtsstunden dazu gefehlt habe, tue ich mich momentan sehr schwer damit.
Mein Code bisher:
#include <stdio.h> #include <stdlib.h> #define LENGTH 20 int main() { char arr[LENGTH]; int anzahl=0; char buchstabe[1] = {'e'}; printf("Wort eingeben:\n"); scanf("%s", &arr); //Hier dann //Vergleich-und Zählvorgang printf("Das Wort ''%s'' enthaelt %d Mal den Buchstaben 'e'\n", arr,anzahl); }
Das ist auch das erste Mal, dass wir mit chars arbeiten, das kommt leider noch erschwerend hinzu^^
Ich bin mir sicher, dass das für die meisten hier ein Klacks ist, aber seid bitte nachsichtig, ich fange gerade erst an zu Programmieren
Mfg
-
Ein char ist erstmal nur eine Ganzzahlvariable, die bequem ein ZEichen aufnehmen kann.
Ein char-Array unterscheidet sich also nicht besonders von eienm int-Array.Um trotzdem ZEichenketten in C verarbeiten zu können, gibt es die Vereinbarung, dass das Ende eines Strings mit dem Zeichen '\0' gekennzeichnet wird..
Du musst also in einer Schleife durch das Array gehen, bis das Zeichen '\0' auftaucht.
Hier mal für alle Zeichen mit Array:
#include <stdio.h> #include <stdlib.h> #define LENGTH 20 int main() { char arr[LENGTH]; int anzahl=0; int i; // char buchstabe[1] = {'e'}; char buchstabe = 'e'; // dies ist etwas anderes als die Zeile drüber printf("Wort eingeben:\n"); scanf("%s", &arr); for (i=0;arr[i] != '\0'; i++) { //Hier dann //Vergleich-und Zählvorgang anzahl++; } // printf("Das Wort ''%s'' enthaelt %d Mal den Buchstaben %c\n", arr, anzahl, buchstaben); printf("Das Wort \"%s\" enthaelt %d Buchstaben \n", arr, anzahl); }
-
Danke, hatte es auch erst so probiert :
char buchstabe = 'e'
Wollte den Buchstaben dann mal testweise ausgeben, aber habe dabei %s anstatt %c genommen. Wie so oft so ein kleiner und blöder Fehler, der mich am Weiterarbeiten hindert^^
Der Rest ist ja einfach. Und Pointer braucht man also garnicht dafür. Vielen Dank#include <stdio.h> #include <stdlib.h> #define LENGTH 20 int main() { char arr[LENGTH]; int anzahl=0; char buchstabe= 'e'; int i; printf("Wort eingeben:\n"); scanf("%s", &arr); for (i=0;arr[i] != '\0'; i++) { if (arr[i]==buchstabe) anzahl++; } printf("Das Wort ''%s'' enthaelt %d Mal den Buchstaben 'e'\n", arr,anzahl); }
-
scanf("%s", &arr);
ist falsch und muss
scanf("%s", arr);
heißen, oder besser
scanf("%19s", arr);
oder besser
scanf("%19[^\n]", arr);
oder besser
scanf("%19[^\n]", arr); {int c; while( (c=getchar())!=EOF && c!='\n');}
-
Die letzten beiden Vorschläge übersteigen unser bereits Erlerntes.
Mit &arr hat es aber auch geklappt, aber bei Arrays lässt man das kaufmännische 'Und' beim Einlesen weg?
Und das %19s verwendet man, da das Wort maximal 19 weitere Buchstaben beinhalten kann, richtig?
Mfg
-
%s bei printf erwartet eine nullterminierte Zeichenkette.
Da dein Array nur für ein Zeichen Platz hatte, ist da dann kein Platz mehr für die '\0' oder für den Buchstaben.Das
scanf("%19s", arr);
ist in diesem Fall ausreichend, da ja ein Wort eingelesen werden soll und auf Fehleingaben keine Rücksicht genommen werden muss.Man lässt bei einem Array den Adressoperator & weg, da der Name alleine (ohne []) schon für die Adresse steht.
Du kannst die Adresse vom ersten Element auch mit&arr[0]
ermitteln.
Aber das ist in C eher unüblich.
-
...