Probleme mit stringfunktionen
-
Hi,
ich soll für die Uni ein Programm schreiben mit folgender Aufgabenstellung:Schreiben Sie ein C Programm, welches mit Hilfe von fgets eine
Zeile den Benutzer eingeben lässt.
Die eingegebene Zeile soll dabei folgende Form haben:
Ludwig van Beethoven 1770-1827
Johann Sebastian Bach 1685-1750
Joseph Haydn 1732-1809Extrahieren Sie aus dieser Zeichenkette Vorname(n),
Familiennamen sowie Geburts- und Sterbejahr.
Erzeugen Sie für jede Eingabe eine Ausgabezeile der Form:
Beethoven, L.v. *1770 +1827
Bach, J.S. *1685 +1750
Haydn, J. *1732 +1809Ich komm aber irgendwie überhaupt nicht vorwärts. Bisher hab ich folgendes:
#include <stdio.h> #include <string.h> #include <ctype.h> #include <conio.h> int check_space(int position, char *input) { while(!isspace(input[position])) { position++; } return position + 1; } void write_dates(int position, int number, char *input, char *date1, char *date2) { if(number == 1) { strncpy(date1, input[position], 4); } else(number == 2) { strncpy(date2, input[position], 4); } } void cut_surename(int marker1, int marker2, char *input, char *surename) { surename[0] = input[marker1]; surename[1] = "."; surename[2] = input[marker2]; surename[3] = "."; } int main() { char input[50], name[20], surename[6], date1[4], date2[4]; int marker_one = 0, marker_two = 0, marker_three = 0, position = 0; fgets(input, 50, stdin); marker_one = check_space(position, input); position = marker_one; marker_two = check_space(position, input); position = marker_three; marker_three = check_space(position, input); while(!isdigit(input)) { position++; } printf("*%s +%s", date1, date2); getchar(); }
Aber irgendwie verrenn ich mich von einem Problem ins nächste. Zum Beispiel wie ich feststelle, ob der Vorname ein doppelter oder einfacher ist.
Kann mir irgendwie jemand helfen?
Danke schonmal fürs lesen:)
-
Ich würde von hinten anfangen. Also zuerst Sterbe-, dann Geburtsjahr. Dann kommt der Nachname und der Rest (das davor) ist der Vorname.
-
Da stimme ich devkid zu. Es ist doch völlig egal, ob der Vorname doppelt ist oder nicht. In der Angabe ist wird ja selbst das "van" gleich behandelt wie "Sebastian". Daher würd ich - wie bereits vorgeschlagen - einfach den Eingabestring ablaufen, bis isdigit(c) wahr ist. Die Position merkst du dir und läufst dann im String von da aus wieder zurück, bis isspace(c) wahr ist. Damit kennst du Start- und Endposition des Nachnamens und kannst ihn so in ein Array kopieren.
Wenn du dann wieder an den Anfang des Eingabestrings zurückspringst, musst du nur noch die Anfangsbuchstaben der Vornamen bzw. des Adelsprädikats suchen.
Der Rest sollte nicht allzu schwer sein.