Trex88 Geschrieben 12. Januar 2011 Geschrieben 12. Januar 2011 Liebe Fachinformatiker.de-Community, ich stehe vor einem kleinen Problem in C. Ich muss fuer die Uni eine Aufgabe loesen, die fuer mich nicht ganz einfach ist, da sowohl C als auch sein Handling mit Pointern fuer mich neu sind. Einfachheitshalber poste ich die Aufgabestellung mit. Ich erwarte keine Komplettloesungen - Hinweise waeren ausreichend. Aufgabe 1: Programmieren in C (Schwierigkeitsgrad: mittel) Schreiben Sie einige Funktionen zur Manipulation von Strings. Die Funktionen sollen in eine seperate Datei "stringFunctions.c" geschrieben werden und die Funktionskoepfe in eine Datei "stringFunctions.h". Das ausfuehrbare Modul erzeugen Sie mit "make". * Die Laenge einer Zeichenfolge feststellen. Deklarieren Sie die Funktion "int laenge_arrayschreibweise(char x[])". Greifen Sie auf die Zeichen des Strings mit Hilfe der Arrayindizierung zu. Hinweis: Benutzen Sie keine Bibliotheksfunktionen wie z.B. length o.ae. * Die Laenge einer Zeichenfolge feststellen. Deklarieren Sie die Funktion "int laenge_pointerschreibweise(char *x)". Greifen Sie auf die Zeichen des Strings mit Hilfe von Pointern zu. Hinweis: Benutzen Sie keine Bibliotheksfunktionen wie z.B. length o.ae. * Schreiben Sie eine Prozedur "copy_arrayschreibweise(char x[], char y[])", die einen String als Eingabeparameter hat und den kopierten String ueber den Ausgabeparameter zurueckgiebt. Zur Loesung der Aufgabe benutzen Sie bitte die Schreibeise fuer Arrays. * Schreiben Sie eine Prozedur "copy_pointerschreibweise(char *x, char *y)", die einen String als Eingabeparameter hat und den kopierten String ueber den Ausgabeparameter zurueckgiebt. Zur Loesung der Aufgabe benutzen Sie bitte die Schreibweise fuer Pointer. Das Hauptprogramm "stringMain.c" kopieren Sie sich bitte aus dem Verzeichnis "/usr/local/praktikum/Algorithmen/P8" und erstellen die im Hauptprogramm vorgegebenen Funktionen in der Datei "stringFunctions.c". Makefile stellt für mich kein Problem her. Die Header-Dateien sind auch korrekt und der Kompiliervorgang funktioniert auch. Nur die Funktionen funktionieren noch nicht richtig. Das ist mein bisheriger Code: #include "stringFunctions.h" int laenge_arrayschreibweise (char x[]) { int i, l = 0; for (i = 0; &x[i] != ""; i++) l++; return l; } int laenge_pointerschreibweise (char *x) { int i, l = 0; for (i = 0; &x[i] != ""; i++) l++; return l; } int copy_arrayschreibweise (char x[], char y[]) { int i; for (i = 0; &x[i] != ""; i++) y[i] = x[i]; } int copy_pointerschreibweise (char *x, char *y) { int i; for (i = 0; &x[i] != ""; i++) y[i] = x[i]; } Alleine die erste Funktion scheitert schon daran, dass es eine Endlosschleife ist. Allerdings habe ich keine andere Idee, die Laenge eines Arrays so ganz ohne Bibliotheksfunktionen zu ermitteln. Die anderen Funktionen funktionieren ebenfalls nicht. Für Hilfestellungen, Lösungsansätze o.ä. wäre ich sehr dankbar! Gruß, Trex Zitieren
lilith2k3 Geschrieben 12. Januar 2011 Geschrieben 12. Januar 2011 Frage: Wie ist eine Zeichenkette terminiert? Antwort? Oh, dann liegt die Funktion ja auf der Hand. Das ist Kindergarten ... Und sowas macht Ihr in der Uni? Vielleicht sollte ich ja doch nochmal studieren *g* Besorg Dir eine Ausgabe von Kernighan & Ritchies fantastischem C-Buch! Zitieren
Trex88 Geschrieben 12. Januar 2011 Autor Geschrieben 12. Januar 2011 (bearbeitet) Hallo lilith2k3, danke für deine Antwort! Frage: Wie ist eine Zeichenkette terminiert? Antwort? Oh, dann liegt die Funktion ja auf der Hand. Es ging ja eben darum, die Aufgabe völlig ohne Bibliotheksfunktionen zu lösen. Das ist Kindergarten ... Und sowas macht Ihr in der Uni? Vielleicht sollte ich ja doch nochmal studieren *g* Da widerspreche ich dir nicht. Allerdings macht man manchmal auch in einer für einem selbst geläufigen Programmiersprache "offensichtliche" Fehler, die man dann - aufgrund derer eigentlichen Offensichtlichkeit - leicht übersieht. In meinem Fall waren es auch nur ein paar Zeichen. xD Und ein Informatikstudium ist für erfahrene bzw. stark interessierte Programmierer, die schon vorher sehr viel mit Computern zu tun hatten, eigentlich kein Problem. Nur die Mathematik macht viele zu schaffen. Besorg Dir eine Ausgabe von Kernighan & Ritchies fantastischem C-Buch! Danke, ich werde das Buch ggf. zur Hand nehmen. -------- Das Problem ist gelöst. Ich habe den gleichen Post auf gulli gepostet, da dieser Server sehr stark überlastet war und ich eine zeitnahe Antwort brauchte. Verzeiht mir! ^^ Hier die Lösung - für den seltenen Fall, dass andere ähnliche Probleme haben sollten: #include "stringFunctions.h" int laenge_arrayschreibweise (char x[]) { int i, l = 0; for (i = 0; x[i] != '\0'; i++) l++; return l; } int laenge_pointerschreibweise (char *x) { int i, l = 0; while (*x++ != '\0') l++; return l; } int copy_arrayschreibweise (char x[], char y[]) { int i; for (i = 0; x[i] != '\0'; i++) y[i] = x[i]; } int copy_pointerschreibweise (char *x, char *y) { int i; while (*x != '\0') *y++ = *x++; } Gruß, Trex Bearbeitet 12. Januar 2011 von Trex88 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.