Add string assignments.

This commit is contained in:
paulusja 2025-10-16 12:50:57 +02:00
parent 63ca042679
commit 4c5c651c40
4 changed files with 189 additions and 0 deletions

View File

@ -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 <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#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;
}

42
02_strings/eingabeTest.c Normal file
View File

@ -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 <stdio.h>
#include <stdlib.h>
#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;
}

78
02_strings/fehler.c Normal file
View File

@ -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 <stdio.h>
#include <stdlib.h>
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();
}

38
02_strings/laengen.c Normal file
View File

@ -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 <stdlib.h>
#include <stdio.h>
#include <string.h>
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));
}