7. ANSI-C-Aufgabe: Strings und Bibliotheken

Letztes Update: Dienstag, 16. August 2016 - 16:41 Uhr

Original-Aufgabenstellung:

Wir wollen ein paar grundlegende Werkzeuge zur Stringmanipulation entwickeln, die uns vielleicht noch bei Gelegenheit nützlich sein können.

Ein wichtiger Aspekt im Umgang mit derartigen Werkzeugen ist, diese systemweit installieren zu können, so daß man sie beim Schreiben von Programmen, die solche Hilfsfunktionen benutzen sollen, nicht immer hinzukopieren muß. Zu diesem Zweck kann man mit den gängigen C-Compilern Bibliotheken erzeugen, die zentral abgelegt und dann zu Programmen hinzugelinkt werden.

Anforderungen

  • Es sollen folgende Funktionen erstellt werden:
    • int cstring_word(char* s, char* sword)
      Liest das erste Wort aus einem String und speichert dieses in sword. Der Quellstring s wird hierbei nicht verändert.

    • void cstring_rot13(char* s)
      Kodiert den String nach dem ROT13 - Verfahren. Da ROT13 nur auf Großbuchstaben arbeitet, soll diese Funktion intern cstring_toupper aufrufen, um alle Kleinbuchstaben ihrer Eingabe in Großbuchstaben umzuwandeln.

    • void cstring_reverse(char* s)
      Dreht einen String um.

    • void cstring_wdreverse(char* s)
      Dreht einen String wortweise um.

    • void cstring_toupper(char* s)
      Wandelt einen String in Großbuchstaben um.

    • void cstring_tolower(char* s)
      Wandelt einen String in Kleinbuchstaben um.

  • Alle Funktionen müssen mit dem Minimal-Zeichensatz funktionieren, das heißt, Umlaute etc. brauchen nicht behandelt werden. Die Funktionen sollen auch vernünftig mit leeren Strings arbeiten, NULL-Pointer sind aber nicht erlaubt und brauchen daher auch nicht abgefangen werden.

  • Erstellt aus eurer Lösung eine Bibliothek libcstring.a (unter Unix) bzw. cstring.lib (unter Windows) und stellt eine Headerdatei cstring.h mit den Prototypen der o.g. Funktionen zur Verfügung. Die Quelltextdatei für Eure Lösung soll cstring.c heißen.

Hinweise

  • Hinweise, wie das Erzeugen von Bibliotheken in unseren beiden Umgebungen funktioniert, findet Ihr im Abschnitt Erzeugen von Bibliotheken in Herberts technischen Informationen.

  • Um euch das ganze zu vereinfachen benutzen wir nur Sätze, die aus Worten bestehen die eine Länge von 256 Zeichen nicht übersteigen.

  • Im Header ctype.h sind einige Funktionen deklariert, mit denen man Buchstaben umwandeln oder deren Eigenschaften abfragen kann. Schaut Euch dazu einmal den Abschnitt Character Handling im GNU C Library Manual an.

  • Bei der Abnahme sollt ihr zeigen, daß ihr verstanden habt, wie man unter Unix mit einem Makefile eine Bibliothek erzeugt und wie man das ganze unter Windows in Visual Studio macht.

  • Wörter werden in unseren Bibliotheksfunktionen durch die Zeichen Tab, Newline und Leerzeichen getrennt. Alle andere Zeichen Bilden die Wörter.

  • Beispiel zu den Funktionen:
    • cstring_reverse
      Aus Otto wird ottO

    • cstring_wdreverse
      Aus Otto wird zwar immer noch ottO, aber aus Hallo Otto wird ollaH ottO.

Erstellt euch euren eigenen Test und testet euer Programm damit sorgfälltig auf alle nur erdenkbaren Situationen!

Ihr seid schließlich nicht darauf angewiesen, daß euch ein Test gestellt wird. Wenn ihr im späteren Berufsleben ein Programm abliefert, kommt der Kunde ja auch nicht mit einem Test, sondern erwartet, daß das Programm einwandfrei funktioniert. Ansonsten endet das Projekt nämlich in einem lebenslangen Support-Service.

Nach mittlerweile 6 Übungen solltet ihr in der Lage sein, einen eigenen Test zu schreiben.

Ab sofort gelten die verschärften Abnahmeregeln, wie sie auch aus anderen Programmierübungen bekannt sind:
Das Programm muß am Anfang der Stunde abnahmebereit sein. Sollten dann noch Fehler im Programm sein, so habt ihr exakt 10 Minuten Zeit zur Nachbesserung. Ein weiteres Nachbessern ist nicht möglich und führt zum Nicht-Bestehen der Aufgabe.

Also: Testet euer Programm sorgfältig unter beiden Betriebssystem. Der gcc ist viel strenger als das Visual Studio, was ANSI-C angeht.

Die Newsgroup steht euch natürlich weiterhin zur Verfügung um Fragen zur Aufgabe zu stellen oder um untereinander Testdaten auszutauschen. Aber außerhalb der Übung werden wir keine Programm mehr testen oder abnehmen! Und in der Übung auch nur genau ein mal.


Gutes Gelingen!

 

Download Beispiel-Lösungsvorschlag, Quelltext inkl. Projektdateien für VC6 (ZIP-Archiv, 56 KB)

 

Zur Aufgaben-Übersicht


 

Gefällt dir die C Übungsaufgabe? Schreibe doch einen Kommentar...

 

Neuen Kommentar abgeben

s8rgj