Zweidimensionale String-Arrays bearbeiten
-
Hallo Community!
Ich studiere im ersten Semester Informatik und muss jede Woche ein Praktikum fertigstellen. Nun benötige ich bei diesem Praktikum eure Hilfe. Aufgabe ist es, ein zweidimensionales String-Array (ist mit Namen gefüllt) zu sortieren. Das habe ich gemacht und es funktioniert auch(siehe unten), dann soll das sortierte Array in ein neues Array kopiert werden(das habe ich mit memcpy erledigt).Jedoch soll ich den Speicherplatz für das andere Array mit "malloc" bereitstellen, das ist das erste Problem wo ich nicht weiter komme. Danach soll ich einen weiteren Wert übergeben, dieser soll wieder sortiert werden.
Die Aufgabenstellung könnt ihr hier nachlesen:
http://www2.htw-dresden.de/~beck/PSPI/praktika/praktC9.htmlIch danke schon mal im Voraus!
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 char data[][10]={"Max","Moritz","Bolte","Boeck","Lempel","Maecke","Huckebein","Schlich","Helene","Antonius"}; char vBuf[128]; int main() { int ige,irt,ibl; for (irt=0;irt < (N-1);irt++) for (ige=irt+1;ige < N;ige++) { for (ibl=0; data[irt][ibl] == data[ige][ibl] && data[irt][ibl] != 0;ibl++) ; //Leeranweisung if (data[irt][ibl] > data[ige][ibl]) { char tmp; for(ibl=0; ibl<10;ibl++) { tmp=data[irt][ibl]; data[irt][ibl]=data[ige][ibl]; data[ige][ibl]=tmp; } } } int i; char laenge[10]; printf("Bitte geben Sie den String ein:\n"); fgets(vBuf,128,stdin); for(i=0;i<10;i++) { //laenge[i]= malloc((sizeof(data[i]))); memcpy(&laenge[i],&data[i],sizeof(data[i])); printf("%s\n",&laenge[i]); } return 0; }
-
Speicherplatz mit malloc reservierst du so:
... char *data[10]; int i; for (i=0; i<10; i++) data[i] = malloc(sizeof (char) * MAX_NAMENLAENGE); .... for (i=0; i<10; i++) free(data[i]); ....
Ungetestet.
-
laenge ist ein char-Array, das kann nur einen String aufnehmen und nicht alle des String-Arrays.
Benenne dein int-Variablen mal vernünftig.
Globale Variablen sind Schrott.
Ebenso der größte Teil des Geschreibsels deines Professors auf der Seite.
Du solltest dir bewusst sein, dass du nach Absolvierung des Kurses dort nach wie vor nicht C programmieren kannst.#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 char data[][10]={"Max","Moritz","Bolte","Boeck","Lempel","Maecke","Huckebein","Schlich","Helene","Antonius"}; char vBuf[128]; int main() { int ige,irt,ibl; for (irt=0;irt < (N-1);irt++) for (ige=irt+1;ige < N;ige++) { for (ibl=0; data[irt][ibl] == data[ige][ibl] && data[irt][ibl] != 0;ibl++) ; //Leeranweisung if (data[irt][ibl] > data[ige][ibl]) { char tmp; for(ibl=0; ibl<10;ibl++) { tmp=data[irt][ibl]; data[irt][ibl]=data[ige][ibl]; data[ige][ibl]=tmp; } } } char (*dataneu)[10] = malloc( (N+1) * 10 ); memcpy( dataneu, data, sizeof data ); scanf("%9[^\n]",dataneu[N]); for (irt=0;irt < (N);irt++) for (ige=irt+1;ige < N+1;ige++) { for (ibl=0; dataneu[irt][ibl] == dataneu[ige][ibl] && dataneu[irt][ibl] != 0;ibl++) ; //Leeranweisung if (dataneu[irt][ibl] > dataneu[ige][ibl]) { char tmp; for(ibl=0; ibl<10;ibl++) { tmp=dataneu[irt][ibl]; dataneu[irt][ibl]=dataneu[ige][ibl]; dataneu[ige][ibl]=tmp; } } } free(dataneu); return 0; }
Ich hoffe du erkennst von selbst, dass die im Beispiel plakativ gewählte Codedopplung förmlich nach einer Auslagerung in eine eigene Funktion schreit.