Ryan
Ryan

Reputation: 1

I need to write a C program that calls a given function to count the number of characters and digits in a file

I need to write a C program that counts the number of characters and digits in a file. I believe my best attempt is close, but the program must call a given function, mostfrequent(), and I cannot figure out how to implement it into my main so that they work together. Any help would be greatly appreciated. Thank you.

// this is the function my program is required to use.

int mostfrequent(int *a, int length) {
    int index = 0;
    int max = a[0];
    int i;
    for (i = 1; i < length; i++) {
        if (a[i] > max) {
            max = a[i];
            index = i;
        }
    }
    return index;
}

// this is my closest attempt at a working program so far, but it does
// not call mostfrequent() which I need it to do.

int main() {    
    typedef FILE *ptr_file;
    int x, i, j;
    int length;
    char c;
    char ch[1000];
    int a = 65;
    c = getc(ptr_file);

    ptr_file = fopen("file.txt", "r");

    if (!ptr_file)
        return 1;

    while (c != EOF) {
        scanf(ptr_file, "%s", ch[i]);
        i++;

        fclose(ptr_file);
    }

    for (i = 0; i < length; i++) {
        for (j = 0; j < length; j++) {
            if (a < 116) {
                if (char(a) == 'ch[j]')
                    char max_char_temp=(char)a
                count_temp++;
            }
            if (count_temp > count) {
                count = count_temp;
                max_char = max_char_temp;
            }
            return 0;
        }

Upvotes: 0

Views: 104

Answers (1)

user3629249
user3629249

Reputation: 16540

regarding the question: when to call the most_frequent() function.

After you have created an array (which would be 36 entries long of integers), initialize that array to all zeros, then incremented the appropriate entry for each character read from the input file. (note 36 entries allows for a...z + 0...9 so all other characters read from the file should be discarded. Then pass the array and 36 to the most_frequent() function

then code similar to the following could do the job:

#include <stdio.h>
#include <stdlib.h>
#include <ctypes.h> // isalpha(), isdigit(), toupper() 

#define NUM_ALPHA (26)

int main( void )
{
    int array[36] = {'\0'};

    //...open file, etc

    //then assure all processed characters are upper case or numeric 
    // and update the count in the array 
    int ch; 
    while( ch = getc( file ) != EOF && '\n' != ch) 
    { 
        if ( isalpha(ch) ) 
        { 
            ch = toupper(ch); 
            array[ch - 'A']++;
        } 

        else if (isdigit(ch) ) 
        {
            array[ (ch-'0') + NUM_ALPHA ]++; 
        } 
    } 

    int index = mostfrequent( array, sizeof(array)/sizeof(array[0]);

    //... do what is needed with 'index' for instance
    printf( "the highest occurring char is:" );
    if( index < NUM_ALPHA )
    {
        printf( "%c\n", index+'A' );
    }
    else
    {
        printf( "%d\n", (index-NUM_ALPHA)+'0');
    }

    fclose( file );
    return 0;
}

however, note that mostfrequent() only returns the index to the first entry encountered with the max value, when there are multiple entries with the same max value.

Upvotes: 1

Related Questions