Wie muss ich eine Funktion int sucheZeichen(const char s[], char c) erstellen und damit anzahl von Buchstaben ermitteln?

3 Antworten

Erstmal wüsste ich gerne um welche Programmiersprache es sich handelt :)

Außerdem ergibt deine Beschreibung im Verbund mit deinem Beispiel keinen Sinn. Die Funktion soll doch nach dem char c suchen und nicht alle Buchstaben zählen. Wenn für c = i festgelegt ist würde bei 'Tim' 1 rauskommen.

Woher ich das weiß:Studium / Ausbildung – Ausgebildeter Informationstechnischer Assistent (Ø 1,08)
Vlsca96Barca 
Fragesteller
 05.12.2019, 14:59

Hallo erstmal, also es geht erstmal um C. Und wie gesagt das ist halt meine Aufgabe. ich kann dir ja mal die gesamte Aufgabe zeigen:

 Schreiben Sie eine Funktion int sucheZeichen(const char s[], char c), wobei der Rückgabewert der Häufigkeit des Characters c im Char-Array s entspricht.

▪ Schreiben Sie eine Funktion int laengeZeichenkette(const char s[]), die die Anzahl der Zeichen (die Länge der Zeichenkette) als Rückgabewert liefert.

▪ Schreiben Sie dann ein Hauptprogramm, das eine kleine Menüsteuerung enthält, um nach einem Buchstaben in einem Namen zu suchen.

Der Ablauf soll dann so aussehen:

Bitte Namen eingeben: Tim

Isabella hat 3 Zeichen.

Möchtest Du nach einem Buchstaben in Tim suchen (j / n)? j

Bitte Buchstaben eingeben: t

Der Buchstabe t kommt 1-mal vor.

Möchtest Du nach einem Buchstaben in Tim suchen (j / n)? j

Bitte Buchstaben eingeben: k

Der Buchstabe k kommt 0-mal vor.

Möchtest Du nach einem Buchstaben in Isabella suchen (j / n)? n

Auf Wiedersehen! Hinweise:

▪ Verwenden Sie aus Übungsgründen im Menü die switch Anweisung, die in den Case Labels die Character j und n auswertet.

▪ Verwenden Sie fflush(stdin) aus der Bibliothek , um Probleme mit dem Tastaturpuffer bei der Eingabe zu umgehen. 

0

Gehe jedes einzelne Zeichen im Array durch und vergleiche es mit dem Zeichen, nachdem gesucht wird. Je Fund erhöhst du einen Zähler um 1.

Was du dazu wissen musst:

1) Du kannst auf einzelne Elemente eines Arrays so zugreifen:

char letters[5];
char erstesElement = letters[0];
char zweitesElement = letters[1];
char drittesElement = letters[2];

char size = 4;
char letztesElement = letters[size];

2) Du solltest eine Schleife verwenden, um über jedes Element des Arrays zu laufen. Die Schleife erhöht je Durchlauf eine Variable, die du als Index für das Array verwenden kannst.

Vlsca96Barca 
Fragesteller
 05.12.2019, 15:00

Alles klar das ist schonmal gut zu wissen ^^

Und wie genau müsste die schleife hier dann aussehen, da ja auch Namen mit z.B. 12 buchstaben geben könnte. Wie lang muss die schleife dann sein?

0
regex9  05.12.2019, 15:07
@Vlsca96Barca

Aja stimmt, das kann ich dir noch sagen. Mit dem sizeof-Operator kannst du die Speichergröße ermitteln.

int sizeOfArray = sizeof(letters);

Dabei wird jedes Element im Array mit der Größe des Datentyps multipliziert.

int sizeOfChar = sizeof(char);
int size = sizeOfArray / sizeOfChar; // Anzahl Elemente im Array
0
Vlsca96Barca 
Fragesteller
 05.12.2019, 15:59
@regex9

könntest du mir vielleicht noch einmal kurz sagen wie genau die schleife aussehen muss?

0
regex9  05.12.2019, 16:10
@Vlsca96Barca

Ich gebe dir nur ein Beispiel für eine Schleife, die durch ein Array läuft und jeden einzelnen Eintrag ausgibt:

char letters[] = { 'h', 'e', 'l', 'l', 'o' };
int lengthOfArray = sizeof(letters) / sizeof(char);
int i;

for (i = 0; i < lengthOfArray; ++i) {
  printf("%c", letters[i]);
}

Es gibt noch viele andere Möglichkeiten, wie sich das implementieren lässt, das möchte ich an dieser Stelle nur erwähnen, damit nicht der Eindruck entsteht, es gäbe nur einen absoluten Weg.

Anhand all der gegebenen Informationen solltest du die Aufgabe nun selbst lösen können. Mehr gebe ich nicht vor.

0
Vlsca96Barca 
Fragesteller
 05.12.2019, 16:11
@regex9

Alles klar nun weiß ich bescheid vielen Dank dir!

0

Ausgehend davon, dass es um C geht:

int sucheZeichen(const char s[], char c){
    int n = 0;
    while(*s) n += (*(s++) == c) ? 1 : 0;
    return n;
}

P.S.: Dein Beispiel passt nicht zu deiner Aufgabenstellung. Die Aufgabenstellung besagt "zähle, wie oft das Zeichen c im Text vorkommt", dein Beispiel sagt "der Text hat %d Zeichen".

Isendrak  05.12.2019, 15:03

Okay, in einem Kommentar zu einer anderen Antwort gibst du ja mal etwas mehr Informationen heraus.

Daher:

int laengeZeichenkette(const char s[]){
    int n = 0;
    while(*(s++)) ++n;
    return n;
}
0
Vlsca96Barca 
Fragesteller
 05.12.2019, 15:05
@Isendrak

Vielen Dank für die Antwort :)

Es Antworten grade nur so viele daher ist es schwer allen gleichzeitig zu antworten

0
Vlsca96Barca 
Fragesteller
 05.12.2019, 19:09
@Isendrak

könntest du mir dann bitte mal zeigen wie das gesamte Programm aussehen sollte? weil der Benutzer muss ja noch einen Namen eingeben und dann noch entscheiden welcher Buchstabe gesucht werden soll

0
Isendrak  05.12.2019, 19:18
@Vlsca96Barca

Naja, ein bisschen musst du schon noch selbst machen, daher hier nur ein paar Stichworte: fgets, printf und ggf. fgetc.

Und ein Kurzbeispiel:

char eingabe[64];
printf("Eingeben du sollst: ");
fflush(stdout);
fgets(eingabe, 63, stdin);
printf("Eingegeben \"%s\" du hast.\n", eingabe);
0