0

I am having some trouble starting my program. I'm new to this. I have done some research and found some resources, but I have trouble applying it to the code. It is mostly based on pointers and structures.

I mainly need help with learning how to store the data in the struct, and how to initialize everything.

The program is supposed to find the frequency of characters in a file. I need to use dynamic memory allocation. And use a dynamically allocated array of pointers to store the characters and frequencies. I am supposed to use malloc() to allocate the array and realloc() to increase the size of the array to insert more elements. But I have no idea how to do this.

The program uses these functions-

• charInCFStruct:which returns the index of charfreq struct which has the char c stored in its member variable next. If none of the charfreq structs contains c then it has to return -1.

• printCFStruct: Prints the contents of all of the charfreq structs.

• freeCFStruct: Frees all of the charfreq structs and then frees the pointer to the structs.

Down below is what I know is right so far. I thought it would be easier to start again from there. I am not asking for code exactly, just some help with the topics I need to do this, and a push in the right direction. Thank you!

#include <stdio.h>
#include <stdlib.h>/*
* struct for storing a char and the number of times it appears in a provided text */
struct charfreq
{
int count;
char next;
};

typedef struct charfreq charfreq;

/*
* Returns the index of charfreq struct which has the char c stored in its member variable next.
* If none of the charfreq structs contains c then it returns -1.
*/
int charInCFStruct(charfreq **cfarray, int size, char c){

}

/*
 * Prints the contents of all of the charfreq structs.
 */
void printCFStruct(charfreq **cfarray, int size){

}

/*
 * Frees all of the charfreq structs and then frees the pointer to the structs.
 */
 void freeCFStruct(charfreq **cfarray, int size){

 }

int main(void)
{
charfreq **cfarray;
FILE *inputfile;
char next;
int size = 10; /* used initial value of 10 but any positive number should work    */


int i = 0;
int pos;

/* open file to read from */
inputfile = fopen("chars.txt", "r");

if(inputfile == NULL)
    printf("chars.txt could not be opened.  Check that the file is in the same directory as you are running this code.  Ensure that its name is chars.txt.\n\n");

/* allocate space for pointers to char frequency structs */
cfarray = (charfreq**)malloc(size*sizeof(charfreq*));

/* read in chars until the end of file is reached */
while(fscanf(inputfile, "%c", &next) != EOF){

    /* fill in code to fill structs with data being read in */


    /* call to increase space after changing size */
    cfarray = realloc(cfarray,size*sizeof(charfreq*));
}

/* print out char frequency structs */
printCFStruct(cfarray,i);

/* free all char frequency structs */
freeCFStruct(cfarray,i);

/* close the file we opened earlier */
fclose(inputfile);

return 0;
}
  • You need to learn about linked list (dynamic arrays), only malloc() will be enough to insert more elements but even realloc() can be used. –  Jul 25 '15 at 04:24
  • Thank you, I will look into that! – henvdorg Jul 25 '15 at 04:51

0 Answers0