Zurück

Programmierung - ANSI-C

Übungen

Übung 5-1

Zeichenkettenverarbeitung: Worte zählen

Schreiben Sie ein Programm wordcount.c, das Ihnen zu einer einzugebenden Zeichenkette ermittelt, aus wievielen Worten der Text besteht.
Worte können dabei aus Buchstaben, Ziffern und Bindestrichen bestehen; alle anderen Zeichen fungieren als Trennzeichen. Die Zeichenkette "Die User coolio23 und mueller-luedenscheid sind gerade im Chat-Room" besteht somit aus neun Worten.

Anmerkung: Wie Sie sicherlich schon bemerkt haben, liest die Funktion scanf() nur bis zum ersten Leerzeichen bzw. allgemein dem ersten white space ein. Nachstehendes Code-Fragment zeigt die Funktion fgets() im Einsatz, mit der Sie - noch dazu überlaufgeschützt - eine Zeichenkette inklusive eventueller Leerzeichen einlesen können. Lediglich das abschließende Return ist ggf. mit in der Zeichenkette abgespeichert!

    char text[2048];
    puts("Bitte Text eingeben: ");
    fgets(text,2048,stdin);
    puts(text);
      

Übung 5-2

Zeichenkettenverarbeitung: Datum auswerten

Schreiben Sie ein Programm datum.c, das Ihnen folgendes ermöglicht.

  1. Zu einem eingegebenen Datum als Zeichenkette in der Form "23.08.19" soll die Funktion getTag() den Tag im Monat (hier also die Zahl 23) zurückliefern.
  2. Entsprechend sollen die Funktionen getMonat() und getJahr() die numerischen Werte des Monats und des Jahres zurückgeben, also 8 bzw. 2019. (Der numerische Jahreswert soll vierstellig sein; dabei sollen alle Angaben über 70 als Jahre im 20.Jahrhundert, alle Angaben bis 70 einschließlich als Jahre des 21.Jahrhunderts interpretiert werden.)
  3. Eine Funktion getMonatsname() soll darüber hinaus den deutschsprachig ausgeschriebenen Monatsnamen zurückliefern. Der Aufruf getMonatsname("25.08.19") soll also "August" zurückgeben.

Übung 5-3

Zeichenkettenverarbeitung: Numerische Auswertung

Schreiben Sie bitte eine Funktion value(), die zu einer übergebenen Zeichenkette (im Sinne von Anfangsadresse) den dargestellten numerischen int-Wert zurückliefert, sofern die Zeichenkette eine ganze Zahl darstellt, also nur aus Ziffern sowie einem optionalen Vorzeichen "+" oder "-" besteht. Beschreibt der Inhalt keine ganze Zahl, so soll die Funktion value() den Wert 0 zurückgeben.

Diese Funktion soll also insbesondere den Prototypen int Value(char *); besitzen.

Beispiele: Im oben beschriebenen Sinne sollen value("123") den Wert 123 und value("1010") den Wert 1010 ergeben. Ist char s[10] = "34"; deklariert, so soll value(s) natürlich den Wert 34 liefern. Dagegen sollen die Aufrufe value("Haus") oder value("1+1") jeweils den Wert 0 zurückliefern. Leerzeichen vor oder nach der eigentlichen Zahl sollen allerdings toleriert werden, d.h. der Aufruf value(" -17 ") soll erwartungsgemäß den numerischen Wert -17 ergeben.

Übung 5-4

Zeichenkettenverarbeitung: Mustererkennung / Syntaxprüfung

Implementieren Sie bitte eine Funktion pruefeKennung(), die eine Zeichenkette daraufhin überprüft, ob sie das nachfolgende Format einhält. Ist dies der Fall, so soll die Funktion 1, andernfalls eine 0 zurückliefern.
Gültig sei eine Kennung genau dann, wenn Sie mit zwei oder drei Buchstaben beginnt und anschließend drei oder vier Ziffern besitzt.

Gültig sind in diesem Sinne also die Sequenzen "AA123", "AB9876", "ABC123" oder "LEV2011". Ungültig sind beispielsweise "A90123", "ABC43A" oder "XY22".

    printf("%d",pruefeKennung("OK1000"));    /* Ausgabe 1 */
    printf("%d",pruefeKennung("WRONG22"));   /* Ausgabe 0 */

Übung 5-5

Zeichenkettenverarbeitung: Sortieren

Speichern Sie in einem geeigneten Array bitte (bis zu fünfzig) Zeichenketten (fachlich z.B. Namen) ab.

  1. Schreiben Sie hierzu eine Funktion eingabe(), die (eben bis zu fünfzig) Zeichenketten in dieses Array von Tastatur einlesen lässt.
  2. Ergänzen Sie weiterhin um eine Funktion ausgabe(), die dieses Array auf die Konsole ausgibt.
  3. Implementieren Sie schließlich eine Funktion sortieren(), die dieses Array im Sinne der sog. lexikographischen Ordnung aufsteigend sortiert. Das heißt: waren zuvor zum Beispiel die Namen "Meier", "Zimmermann" und "Weber" in dem Array gespeichert, so soll anschließend die Reihenfolge in dem Array "Meier", "Weber", "Zimmermann" sein.



© 2000-2023 FHDW/Peter Baeumle-Courth