Zeichenketten und Funktionen
Eine Zeichenkette ist ein Array von char-Werten, also bekommt eine Funktion sie als Parameter wie jedes andere Array:
#include <stdio.h>
void stelle_vor(const char name[]) {
printf("Mein Name ist %s.\n", name);
}
int main(void) {
char freund[] = "Tom";
stelle_vor("Anna");
stelle_vor(freund);
return 0;
}Dieses Programm gibt aus:
Mein Name ist Anna.
Mein Name ist Tom.Du kannst einen Text in Anführungszeichen oder ein char-Array übergeben. In zwei Dingen unterscheidet sich das von den Zahlen-Arrays der vorigen Übung:
- Es gibt keine Anzahl. Eine Zeichenkette endet mit dem Nullzeichen
'\0', also kann die Funktion ihr Ende selbst finden: mit einer Schleife, die bei'\0'aufhört, oder mitstrlen. - Vor dem Typ steht das Wort
const, das du von Konstanten kennst. Es ist ein Versprechen, dass die Funktion die Zeichenkette nur liest und nicht ändert. Wenn die Funktion es versuchte, zum Beispiel mitname[0] = 'X';, ließe sich das Programm nicht kompilieren:error: read-only variable is not assignable(einer Variablen, die nur zum Lesen da ist, kann man nichts zuweisen). Schreibeconst, wann immer eine Funktion eine Zeichenkette nur liest. Dann weiß jeder, der die Funktion liest, auf einen Blick, dass der Text so bleibt, wie er ist.
Eine Funktion kann eine Zeichenkette in einer Schleife durchgehen und ein Ergebnis zurückgeben. Diese hier zählt, wie oft ein Buchstabe in einem Text vorkommt:
#include <stdio.h>
#include <string.h>
int zaehle_buchstabe(const char text[], char buchstabe) {
int anzahl = 0;
int laenge = strlen(text);
for (int i = 0; i < laenge; i++) {
if (text[i] == buchstabe) {
anzahl++;
}
}
return anzahl;
}
int main(void) {
printf("%d\n", zaehle_buchstabe("Bananenbaum", 'a'));
printf("%d\n", zaehle_buchstabe("Mississippi", 's'));
return 0;
}Dieses Programm gibt aus:
3
4Eine Funktion ohne const darf die Zeichenkette ändern. Wie bei anderen Arrays bleibt die Änderung im Array des Aufrufers:
#include <ctype.h>
#include <stdio.h>
void in_grossbuchstaben(char text[]) {
for (int i = 0; text[i] != '\0'; i++) {
text[i] = toupper(text[i]);
}
}
int main(void) {
char nachricht[] = "hallo";
in_grossbuchstaben(nachricht);
printf("%s\n", nachricht);
return 0;
}Dieses Programm gibt aus:
HALLOEine Sache kann eine Funktion nicht: ein Array zurückgeben. Sie kann also keine neue Zeichenkette zurückgeben, so wie sie eine Zahl zurückgibt. Wenn eine Funktion einen Text erzeugen soll, schreibt sie ihn in ein char-Array, das der Aufrufer ihr übergibt, genauso wie in_grossbuchstaben die nachricht ändert.
So schreibst du es:
Anweisungen
- 1
Schreibe über
maineine Funktionspieler_ansagen, die nichts zurückgibt und einen Parameter hat,name: eine Zeichenkette, die die Funktion nur liest. Die Funktion gibt eine Zeile wieDu bist dran, Eva!mit dem Namen aus, den sie bekommt. - 2
Lege in
mainein Arrayspielermit dem Text"Eva"an und rufespieler_ansagen(spieler)auf. Rufe dannspieler_ansagen("Max")auf. Das Programm gibtDu bist dran, Eva!undDu bist dran, Max!aus. - 3
Schreibe unter
spieler_ansageneine Funktionzaehle_ziffernmit einem Parametertext, wieder eine Zeichenkette, die die Funktion nur liest. Sie gibt zurück, wie viele Ziffern der Text enthält;isdigitausctype.hsagt dir, ob ein Zeichen eine Ziffer ist. Gib am Ende vonmain, vorreturn 0;, das Ergebnis vonzaehle_ziffern("sommer2024")mit einer Beschriftung aus:Ziffern: 4.