000
03.12.2007, 19:32 Uhr
tester34
|
Hallo,
könnt ihr mir beim folgenden Programm zur Seite stehen. Es liest Sätze ein, die in einem 2D Pointer Array gespeichert werden. Per Bubblesort wird das ganze sortiert und anschließend die längste Zeile am Anfang ausgegeben. Das ganze bitte in C, mir gehts um ein besseres Verständnis für pointer und malloc.
Vom prinzip sollte das programm korrekt sein, lediglich beim vertauschen der pointer und beim einlesen der sätze hakt es. Die Ausgebeschleife nach /*TEST*/ ist lediglich zu Testzwecken, hier liegt irgendwo ein fehler. Als ausgabe erhalte ich nur die letzte eingegebene Zeile, anschließend stürzt der laden ab... Danke!
mfg tobi
C++: |
#include <string.h> #include <stdio.h> #include <stdlib.h> const int S=999; /*Spalten*/ const int Z=1000; /*Zeilen*/
void sortieren(char**,int);
main() { char** text; /* 2D Zeigerfeld = char* text[] */ char* hilf =(char*) malloc(S * sizeof(char)); int AnzahlZeilen=-1,k; puts("\nBitte geben Sie beliebige Saetze ein:\n(Abbruch durch Eingabe einer \"leeren\" Zeile)\n\n"); text =(char**) malloc(Z * sizeof(char*)); do { AnzahlZeilen++; gets(hilf); *(text+AnzahlZeilen)=(char*) malloc((strlen(hilf)+1) * sizeof(char)); strcpy((*(text+AnzahlZeilen)),hilf); } while(strlen(hilf)>0); if(strlen(*(text+AnzahlZeilen))==0) { AnzahlZeilen--; } /*TEST*/ for(k=AnzahlZeilen;k>=0;k--) { puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); puts(*(text+AnzahlZeilen)); /*text[k] entspricht *(text+AnzahlZeilen)*/ } /**/ puts("Absteigend sortierte Ausgabe:\n"); sortieren(text, AnzahlZeilen); puts("\n\n\n"); system("PAUSE"); return 0; }
void sortieren(char** text, int AnzahlZeilen) { int x,y,l1,l2,k=0; char* tmp; for (x=0;x<=AnzahlZeilen;x++) { for(y=0;y<=AnzahlZeilen;y++) { l1=strlen(*(text+y)); /*Länge String y*/ l2=strlen(*(text+y+1)); /*Länge String y+1*/ if((y<AnzahlZeilen)&&(l1>l2)) { *tmp=*(text+AnzahlZeilen); /*????????????????*/ *(text+AnzahlZeilen)=*(text+AnzahlZeilen+1); *(text+AnzahlZeilen+1)=*tmp; } } } for(k=AnzahlZeilen;k>=0;k--) { puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); puts(*(text+AnzahlZeilen)); /*text[k] entspricht *(text+AnzahlZeilen)*/ } for(k=AnzahlZeilen;k>=0;k--) { free(text[k]); } puts("\nSpeicher wurde wieder freigegeben!\n"); }
|
|