diff --git a/02_strings/anfangsbuchstabe.c b/02_strings/anfangsbuchstabe.c new file mode 100644 index 0000000..6989816 --- /dev/null +++ b/02_strings/anfangsbuchstabe.c @@ -0,0 +1,31 @@ +/* + * Schreiben Sie eine Funktion schreibeAnfangGross, die eine Zeichenkette übergeben bekommt, den Anfangsbuchstaben jedes Wortes groß + * schreibt und einen Zeiger auf den Anfang dieser Zeichenkette zurückgibt. Nutzen Sie für die Eingabe die Eingabefunktion aus + * einer der vorherigen Übungen. + * + * Möglicher Programmablauf: + * >> Geben Sie einen Text nur mit Kleinbuchstaben ein: das ist das haus vom nikolaus. und nebendran wohnt der weihnachtsmann. + * Der bearbeitete Text lautet: + * "Das Ist Das Haus Vom Nikolaus. Und Nebendran Wohnt Der Weihnachtsmann." + */ + +#include +#include +#include +#include +#include "eingabe.h" + +#define MAX_TEXT_LEN 100 + +char *schreibeAnfangGross(char *text, int maxZeichen); + +int main() +{ + char text[MAX_TEXT_LEN] = ""; + + gibTextEin("Geben Sie einen Text nur mit Kleinbuchstaben ein: ", text, MAX_TEXT_LEN); + + printf("Der bearbeitete Text lautet:\n\"%s\"\n", schreibeAnfangGross(text, MAX_TEXT_LEN)); + + return EXIT_SUCCESS; +} diff --git a/02_strings/eingabeTest.c b/02_strings/eingabeTest.c new file mode 100644 index 0000000..58cf7a0 --- /dev/null +++ b/02_strings/eingabeTest.c @@ -0,0 +1,42 @@ +/* + * Legen Sie in einer Datei eingabe.h bzw. eingabe.c die Funktion gibTextEin an, die eine Zeichenkette übergeben bekommt, + * die vor der Eingabe angezeigt wird, einen Puffer, in dem die eingelesene Zeichenkette gespeichert wird, + * und die Größe des Puffers, die die Anzahl an einzulesenden Zeichen darstellt (inklusive Zeilenumbruch und abschließendem + * Null-Zeichen). Die Funktion soll genau eine Zeile Text einlesen. Zudem soll die Funktion prüfen, ob noch Zeichen im + * Eingabepuffer liegen und in diesem Fall den Eingabepuffer leeren. Im Fehlerfall gibt die Funktion 0 zurück, ansonsten 1. Die + * eingelesene Zeichenkette soll den Zeilenumbruch zur Bestätigung der Eingabe nicht enthalten. Nutzen Sie zum Einlesen bitte fgets. + */ + +#include +#include +#include "eingabe.h" + +#define MAX_EINGABE_LEN 10 + +int main() +{ + char testChar; + char eingabeText[MAX_EINGABE_LEN]; + + printf("Zum Testen bitte bei einem Programmdurchlauf weniger und beim naechsten mehr als %d Zeichen eingeben und jeweils mit ENTER bestaetigen.\n", MAX_EINGABE_LEN-1); + + if(gibTextEin("Eingabe: ", eingabeText, MAX_EINGABE_LEN)) + { + printf("Die Eingabe lautet \"%s\". Es sollte kein Zeilenumbruch auftreten.\n", eingabeText); + printf("Wenn alles korrekt implementiert ist, sollte das Programm jetzt nur auf ein ENTER warten und die Ausgabe dann unten leer sein.\n"); + printf("Rest im Eingabepuffer: "); + while((testChar = getchar()) != '\n') + { + printf("%c", testChar); + } + printf("\n"); + } + else + { + printf("Beim Einlesen ist ein Fehler aufgetreten.\n"); + + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/02_strings/fehler.c b/02_strings/fehler.c new file mode 100644 index 0000000..86f73ef --- /dev/null +++ b/02_strings/fehler.c @@ -0,0 +1,78 @@ +/* + * Untersuchen Sie das folgende Programm zunächst ohne es zu kompilieren oder auszuführen. + * Welche Funktionen sind fehlerfrei? + * Handelt es sich im Falle eines Fehlers um einen Laufzeitfehler oder um einen Compiler-Fehler? + * + * Hinweise: + * Compiler-Fehler treten beim Kompilieren des Programms auf. Das Programm lässt sich also + * gar nicht erst übersetzen. + * Bei Laufzeitfehlern lässt sich das Programm (u.U. mit Warnungen) übersetzen. Der Fehler tritt + * erst zur Laufzeit auf. Auch wenn der Fehler nicht immer auftritt bzw. das Programm zum Absturz + * bringt, handelt es sich dennoch um einen Laufzeitfehler. Beliebte Laufzeitfehler sind z.B. Pufferüberläufe. + */ + +#include +#include + +void kopiereString1() +{ + char string1[] = "123456\n"; + char string2[] = "789\n"; + char *stringZgr1 = string1; + char *stringZgr2 = string2; + + while((*stringZgr2++ = *stringZgr1++) != '\0'); + + printf(string1); + printf(string2); +} + +void kopiereString2() +{ + char string1[] = "123456\n"; + char string2[] = "789\n"; + char *stringZgr1 = string1; + char *stringZgr2 = string2; + + while((*stringZgr1++ = *stringZgr2++) != '\0'); + + printf(string1); + printf(string2); +} + +void kopiereString3() +{ + char string1[] = "123456\n"; + char string2[] = "789\n"; + + while((*string1++ = *string2++) != '\0'); + + printf(string1); + printf(string2); +} + +void kopiereString4() +{ + char *string1 = "123456\n"; + char *string2 = "789\n"; + + while((*string1++ = *string2++) != '\0'); + + printf(string1); + printf(string2); +} + +int main() +{ + printf("kopiereString1:\n"); + kopiereString1(); + + printf("kopiereString2:\n"); + kopiereString2(); + + printf("kopiereString3:\n"); + kopiereString3(); + + printf("kopiereString4:\n"); + kopiereString4(); +} \ No newline at end of file diff --git a/02_strings/laengen.c b/02_strings/laengen.c new file mode 100644 index 0000000..39c363b --- /dev/null +++ b/02_strings/laengen.c @@ -0,0 +1,38 @@ +/* + * Was gibt folgendes Programm aus? Überlegen Sie sich erst Ihre Antworten. + * Kompilieren und führen Sie erst danach das Programm aus. + * Wie erklären Sie sich die Ausgaben? + */ + +#include +#include +#include + +void gibLaengenAus(char string[]); + +int main() +{ + char *string1 = "12345"; + char string2[] = "12345"; + char string3[10] = "12345"; + + printf("strlen(string1) = %2d\n", (int)strlen(string1)); + printf("strlen(string2) = %2d\n", (int)strlen(string2)); + printf("strlen(string3) = %2d\n", (int)strlen(string3)); + printf("\n"); + printf("sizeof(string1) = %2d\n", (int)sizeof(string1)); + printf("sizeof(string2) = %2d\n", (int)sizeof(string2)); + printf("sizeof(string3) = %2d\n", (int)sizeof(string3)); + printf("\n"); + printf("gibLaengenAus(string3):\n"); + + gibLaengenAus(string3); + + return EXIT_SUCCESS; +} + +void gibLaengenAus(char string[]) +{ + printf("strlen(string) = %2d\n", (int)strlen(string)); + printf("sizeof(string) = %2d\n", (int)sizeof(string)); +}