Speicherverwaltung

Schreiben Sie ein Programm, das einen Text von stdin einliest und anschließend die Anzahl der Worte, die Anzahl der Buchstaben und zum Schluss eine Tabelle über die Verteilung der Längen und die durchschnittliche Wortlänge ausgibt. Ein Wort ist eine Folge von Zeichen, die nur aus Buchstaben besteht (maximale Wortlänge 30 Zeichen, maximale Textlänge 500 Zeichen).

Eingabe: /text/

Ausgabe: 2 ***
3 ****
4 *
Anzahl der gezählten Worte: 8
Durchschnittliche Wortlänge: 2.75
Anzahl der gezählten Buchstaben: 22

Ich habe die Wortlänge,Buchstaben und Worte schon bestimmt, da ich die Länge der Worte und die häufigkeit dieser Länge auch Ausgeben muss, würde ich gerne eine Matrix verwenden,die ich jeweils erweitere! Wie kann ich das machen? bitte...

Das ist meine bisherige Source:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MAX 500
//--Prototypen--//

void einlesen(int *words,int *anzahl,float *lenght,char text[]);


//--Hauptprogramm--//
int main(void){

int worte=1;
int buchstaben=0;
float wortlaenge=0;
char text[MAX]={0};



einlesen(&worte,&buchstaben,&wortlaenge,text);

return EXIT_SUCCESS;
}

void einlesen(int *words,int *anzahl,float *lenght,char text[]){

printf("Bitte geben sie einen Text ein(Abbruch mit '.'):\n");
int lauf=0;

int hilf=0;
float hilf2=0;
int zaehl=0;
int array[30]={0};



for(lauf=0;text[lauf-1]!='.';lauf++){

text[lauf]=getche();

if(text[lauf]!=32){
*anzahl=*anzahl+1;
zaehl++;



if(text[lauf]=='.'){
*anzahl=*anzahl-1;
zaehl--;


array[zaehl-1]++;

zaehl=0;

}

}
else{
*words=*words+1;

array[zaehl-1]++;

zaehl=0;



}


}

printf("%d",array[4]);

hilf=*anzahl;
hilf2=(float)hilf;
*lenght=hilf2/ *words;
printf("\nanzahl:%d\n",*anzahl);
printf("words:%d\n",*words);
printf("lenght:%.2f\n",*lenght);

}
 
Hi,

wenn du eine einfache Variante verwenden möchtest, dann sollten zwei dynamische int-Arrays auch genügen. Ist viel einfacher mit der dynamischen Speicherwerwaltung zu handhaben ;)
Von Vorteil ist es sicher, wenn du dann mit einer Funktion, diese beiden Arrays nach aussen hin als Matrix behandelst.

Da die Matrix zur Laufzeit vergrößert werden soll, musst du den Speicher dynamisch verwalten, das mit Befehl 'malloc' erfolgt.
Vergrössern kannst du das array mit dem Befehl 'realloc', der gespeicherte Inhalt geht nicht verloren.
Vergiss nicht vor Ende des Programms den angeforderten Speicher wieder freizugeben mit 'free'


hier ein Beispiel für ein int-Array das dynamisch angefordert wurde
int *new_array = malloc( num_elements * sizeof(int));

Speicher vergrößern
new_array = realloc( new_array, new_num_elements *
sizeof(int));

Speicher wieder freigeben
free(new_array);

Noch ein Tip, verlier nie den Base-Pointer, im obigen Beispiel 'new_array'

mfg
 
Zurück
Oben